Estou na aula 9 Java e JSF I: Sua aplicação web com JSF2, concluindo o desafio de alterar e excluir um autor. Para excluir ocorreu corretamente, porem para alterar carrego os dados e quando clico em gravar não atualiza e sim cria um novo., pois o this.autor.getId() sempre vem null, mesmo com o autor carregado. Segue códigos abaixo.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:composition template="_template.xhtml">
<ui:define name="titulo">
Novo Autor
</ui:define>
<ui:define name="conteudo">
<h:form id="autor">
<fieldset>
<legend>Dados do Autor</legend>
<h:panelGrid columns="3">
<h:outputLabel value="Nome:" for="nome" />
<h:inputText id="nome" value="#{autorBean.autor.nome}"
required="true">
<f:validateLength minimum="5" />
<f:ajax event="blur" render="messageNome" />
</h:inputText>
<h:message for="nome" id="messageNome" />
<h:commandButton value="Gravar" action="#{autorBean.gravar}">
<f:ajax execute="@form" render="@form :formTabelaAutores:tabelaAutores"/>
</h:commandButton>
</h:panelGrid>
</fieldset>
</h:form>
<h:form id="formTabelaAutores">
<h:dataTable value="#{autorBean.autores}" var="autor" id="tabelaAutores">
<h:column>
<f:facet name="header">Nome</f:facet>
<h:outputText value="#{autor.nome}"/>
</h:column>
<h:column>
<f:facet name="header">Alterar</f:facet>
<h:commandLink value="altera" action="#{autorBean.carregar(autor)}"/>
</h:column>
<h:column>
<f:facet name="header">Excluir</f:facet>
<h:commandLink value="remove" action="#{autorBean.remover(autor)}"/>
</h:column>
</h:dataTable>
</h:form>
</ui:define>
</ui:composition>
</html>
package br.com.caelum.livraria.bean;
import java.util.List;
import javax.faces.bean.ManagedBean;
import br.com.caelum.livraria.dao.DAO;
import br.com.caelum.livraria.modelo.Autor;
import br.com.caelum.livraria.modelo.Livro;
@ManagedBean
public class AutorBean {
private Autor autor = new Autor();
public Autor getAutor() {
return autor;
}
public List<Autor> getAutores(){
return new DAO<Autor>(Autor.class).listaTodos();
}
public String gravar() {
System.out.println("Gravando autor " + this.autor.getId());
if(this.autor.getId() == null){
new DAO<Autor>(Autor.class).adiciona(this.autor);
}else {
new DAO<Autor>(Autor.class).atualiza(this.autor);
}
this.autor = new Autor();
return "livro?faces-redirect=true";
}
public void remover(Autor autor) {
System.out.println("Removendo Autor....");
new DAO<Autor>(Autor.class).remove(autor);
}
public void carregar(Autor autor) {
this.autor = autor;
}
}