Boa tarde,
Pessoal estou com um problema de logica, não sei se é possível fazer o que eu quero com o JSF mas vou explicar.
Tenho um cadastro de livros que no final existe o botão do upload do arquivo, qual seria a ideia, que o livro seja gravado apenas quando eu clicar no botão gravar, quero fazer isso sem perder as funcionalidades que tenho no botão gravar.
Codigo do botão gravar e upload
<!--Realizar upload -->
        <h:form enctype="multipart/form-data">
                    <p:fileUpload mode="advanced" 
                        fileUploadListener="}"
                        allowTypes="/(\.|\/)(gif|jpg|jpeg|gif|png|PNG|GIF|JPG|JPEG)$/"
                        auto="false" />
                </h:form>
<!--Gravar livro -->
            <p:commandButton value="Gravar" action="#{livroBean.gravar}"
                process="@form" update="@form :formTabelaLivros:tabelaLivros"
                ajax="false" />
Metodo Gravar do Livro
public void gravar() {
        System.out.println("Gravando livro " + this.livro.getTitulo());
        // O metodo abaixo verifica se o livro possui um autor, caso não possua ele não
        // permite a gravação
        if (livro.getAutores().isEmpty()) {
            FacesContext.getCurrentInstance().addMessage("autor",
                    new FacesMessage("Livro deve ter pelo menos um Autor."));
            return;
        }
        DAO<Livro> dao = new DAO<Livro>(Livro.class);
        // Ao clicar no metodo gravar está condição é ativada, caso o livro já exista
        // ele é atualizado, caso contrario ele é atualizadoasd
        if (this.livro.getId() == null) {
            dao.adiciona(this.livro);
            this.livros = dao.listaTodos();
        } else {
            dao.atualiza(this.livro);
        }
        this.livro = new Livro();
    }
Metodo de realizar upload bean
public void upload() {
        try {
            File file = new File(diretorioRaiz(), uploadedFile.getFileName());
            DAO<Arquivo> dao = new DAO<Arquivo>(Arquivo.class);
            arquivo.setNomeArquivo(uploadedFile.getFileName());
            arquivo.setCaminhoArquivo(diretorioRaiz());
            arquivo.setTamanhoArquivo(uploadedFile.getSize());
            dao.adiciona(arquivo);
            OutputStream out = new FileOutputStream(file);
            out.write(uploadedFile.getContents());
            out.close();
            FacesContext.getCurrentInstance().addMessage(null,
                    new FacesMessage("Upload completo", "O arquivo " + uploadedFile.getFileName() + " foi salvo!"));
        } catch (IOException e) {
            FacesContext.getCurrentInstance().addMessage(null,
                    new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro", e.getMessage()));
        }
    }
Tenho um relacionamento 1 para um entre o DB livro e o DB arquivo, gostaria que o arquivo fosse gravado apenas quando o livro estiver ok, ou os dois fossem gravados ao mesmo tempo.
Fico grato com a resposta de todos.