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.