Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Os dados voltam para o formulário mesmo depois de usar new Livro()

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.

2 respostas
solução!

Oi Erick,

1) Data preenchida

Dê uma olhada na classe Livro e verifique se vc está inicializando a data na definição do atributo.

2) Dados do livro antigo

Não tenho certeza, mas F5 repete a ultima requisição e até pode pegar os dados do cache. Será que foi recarregado o livro antigo? Analise o comportamento do navegador pelas ferramentas do desenvolvedor disponíveis dentro do browser. Isso vai te ajudar entender melhor o que está acontecendo.

Agora eu também tenho uma pergunta :) - porque essa InterruptedException no método gravar?

Abs, Nico

Sim você tem razão. Obrigado pelas dicas. Ah sobre sua pergunta kkkkkkkkk isso é sujeira que deixei de um teste com Thread.sleep() e esqueci de apagar.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software