Bom dia pessoal,
eu tenho uma página xhtml que é utilizada para cadastro / alteração.
Quando entro na parte de alteração as informações são carregadas normalmente juntamento com o botão Alterar.
Mais quando eu clico no botão Alterar, ele não vai para o Bean (Que deveria executar o metodo de alterar) e recarrega a página, aparecendo então o botão Salvar.
Meu Bean
package br.sga179.sistema.mb;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import br.sga179.sistema.dao.DAO;
import br.sga179.sistema.dao.PaisDAO;
import br.sga179.sistema.modelo.Pais;
@ManagedBean
@RequestScoped
public class PaisBean implements Serializable{
private static final long serialVersionUID = 1L;
private Pais pais = new Pais();
private List<Pais> paises;
private Long idPais;
public void setPais(Pais pais) {
this.pais = pais;
}
public Pais getPais() {
return pais;
}
public Long getIdPais() {
return idPais;
}
public void setIdPais(Long idPais) {
this.idPais = idPais;
}
public String grava() throws IOException {
DAO<Pais> dao = new DAO<Pais>(Pais.class);
if (pais.getId() == null) {
pais.setSituacao("A");
dao.adiciona(pais);
} else {
dao.atualiza(pais);
}
paises = dao.listaTodos();
this.pais = new Pais();
//FacesContext.getCurrentInstance().getExternalContext().redirect("listPais.xhtml");
return "index";
}
public List<Pais> getPaises() {
if (paises == null) {
System.out.println("Carregando paiss...");
paises = new DAO<Pais>(Pais.class).listaTodos();
}
return paises;
}
public String remove(Pais pais) {
DAO<Pais> dao = new DAO<Pais>(Pais.class);
dao.remove(pais);
this.paises = dao.listaTodos();
return "listPais?faces-redirect=false";
}
public void pesquisar() {
PaisDAO dao = new PaisDAO();
if (pais.getDescricao()!= null) {
this.paises = dao.buscaPais(pais.getDescricao());
}
}
public String editar(Pais pais){
this.pais = pais;
return "pais.xhtml";
}
public String novo(){
this.pais = new Pais();
return "pais?faces-redirect=true";
}
public String telaPrincipal(){
return "listPais?faces-redirect=true";
}
}
Meu listPais.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui">
<ui:composition template="/templates/template.xhtml">
<ui:define name="corpo">
<h:form>
<fieldset>
<h2>
<h:outputText value="Modulo País" />
</h2>
<br/>
<h:outputLabel value="Descrição:" />
<h:inputText id="descricao" value="#{paisBean.pais.descricao}"/>
</fieldset>
<p>
<h:commandButton value="Pesquisar" action="#{paisBean.pesquisar}" rendered="#{empty paisBean.pais.id}" />
<h:commandButton value="Novo" action="#{paisBean.novo}" rendered="#{empty paisBean.pais.id}" />
</p>
<h2>Listagem de Países</h2>
<!-- aqui em cima vai o formulário para gravar os países -->
<p:dataTable value="#{paisBean.paises}" var="pais" styleClass="dados"
rowClasses="impar,par" paginator="true" rows="5" dynamic="true" rendered="#{empty paisBean.pais.id}">
<p:column headerText="Descrição">
#{pais.descricao}
</p:column>
<p:column headerText="Excluir">
<p:commandLink action="#{paisBean.remove(pais)}" value="Remover">
<f:ajax render="@form" />
</p:commandLink>
</p:column>
<p:column headerText="Editar">
<p:commandLink value="Alterar" action="#{paisBean.editar(pais)}" ajax="false"/>
</p:column>
</p:dataTable>
</h:form>
</ui:define>
</ui:composition>
</html>
Minha página problemática
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui">
<ui:composition template="/templates/template.xhtml">
<ui:define name="corpo">
<h:messages layout="table" errorStyle="color: red"
infoStyle="color: green" warnStyle="color: orange"
fatalStyle="color: gray" showSummary="false" showDetail="true" />
<h:form>
<fieldset>
<h2>
<h:outputText value="Novo País"
rendered="#{empty paisBean.pais.id}" />
<h:outputText value="Editar País"
rendered="#{not empty paisBean.pais.id}" />
</h2>
<br />
<h:outputLabel value="Descrição:" />
<h:inputText id="descricao" value="#{paisBean.pais.descricao}"
requiredMessage="O campo descrição deve ser informada"
required="true" />
</fieldset>
<h:commandButton value="Salvar" action="#{paisBean.grava}" rendered="#{empty paisBean.pais.id}"/>
<h:commandButton value="Alterar" action="#{paisBean.grava}" rendered="#{not empty paisBean.pais.id}"/>
<br />
<h:commandLink action="index" value="Voltar" />
</h:form>
</ui:define>
</ui:composition>
</html>