Eu fiz conforme o exercício. Alterei a maneira de salvar um livro utilizando AJAX:
<h:commandButton value="Gravar" action="#{livroBean.gravar}">
<f:ajax execute="@form" render="@form :livroDataTable"/>
</h:commandButton>
E no método gravar(), eu recrio o objeto Livro:
public void gravar() throws InterruptedException {
System.out.println("Gravando livro " + this.livro.getTitulo());
if (livro.getAutores().isEmpty()) {
FacesContext.getCurrentInstance().addMessage("autoresSelectOneMenu", new FacesMessage("Livro deve ter pelo menos um Autor."));
return;
}
new DAO<Livro>(Livro.class).adiciona(this.livro);
this.livro = new Livro();
}
Ele funciona igual o do vídeo, mas assim como no vídeo, vi que ao clicar no botão "gravar" um dado fica ali perdido no formulário, que é a data Data de Lançamento, ele permanece preenchida com os dados da última requisição. Eu recarreguei a página (F5) e para minha surpresa os dados completos voltaram: Titulo, ISBN, Preco... Ai vem a pergunta: Como isso aconteceu se eu dei um new no Livro? Não era para estar utilizando um objeto Livro novo? Como o antigo sobreviveu?
Desde já agradeço pela ajuda.