Essa parte ficou de fora desse curso tão segmentado e atribulado... Vamos lá Temos essa metadata no livro.xhtml:
<f:metadata>
<f:viewParam name="livroId" value="#{livroBean.livro.id}" />
<f:viewAction action="#{livroBean.carregarLivroPelaId}" if="#{param.livroId != null}" />
</f:metadata>
livro.java:
@ManagedBean
@ViewScoped
public class LivroBean {
//outros atributos...
private Livro livro = new Livro();
...
public void carregarLivroPelaId() {
this.livro = new DAO<Livro>(Livro.class).buscaPorId(this.livro.getId());
}
...//outros métodos etc
O que consigo ler daí é que temos um parametro ligado ao id do livro do livroBeam e qu toda vez que o livro do livroBeam tiver algum id (não nulo) o metodo carregarLivroPelaId será chamado carregando o próprio livro. Não entendi o porquê disto>. Se o livro do livroBeam já tem id para que carregar de novo do bando de dados? Se ele já tem id é prova que já foi cadastrado e não está apenas no formulário, ou seja ele já veio do banco. Pra que isto então?