Bom dia.
Senhores estou iniciando no JSF (Vindo do Struts) e estou com alguns problemas que, apesar das inúmeras pesquisas, não consegui resolver.
Na xhtml tenho um selectOneMenu que lista todos os departamentos cadastrados e no <f:selectItem dá a opção de cadastrar um novo departamento.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
template="/layout/template.xhtml">
<ui:define name="corpo">
<h:form id="consultarDepartamento">
<h:panelGrid columns="3" border="1">
<h:outputLabel for="departamentos" value="Departamentos: " />
<h:selectOneMenu id="departamentos" value="#{departamentoBean.departamento.idDepartamento}">
<f:selectItem itemValue="0" itemLabel="Cadastrar um novo departamento"/>
<f:selectItems value="#{departamentoBean.listaDepartamentos}" var="dpt" itemValue="#{dpt.idDepartamento}" itemLabel="#{dpt.descricao}"/>
</h:selectOneMenu>
<h:commandButton value="Avançar" action="#{departamentoBean.consultarDepartamento}" />
</h:panelGrid>
</h:form>
<br />
<br />
<br />
<h:form id="manterDepartamento">
<h:panelGrid columns="4" border="1" rendered="#{departamentoBean.departamento.idDepartamento != null}">
<h:outputLabel for="descricao" value="Nome do Departamento: " />
<h:inputText id="descricao" value="#{departamentoBean.departamento.descricao}" />
<h:commandButton action="#{departamentoBean.cadastrarDepartamento}" value="Cadastrar" rendered="#{departamentoBean.departamento.idDepartamento == 0}" />
<h:commandButton action="#{departamentoBean.cadastrarDepartamento}" value="Atualizar" rendered="#{departamentoBean.departamento.idDepartamento > 0}" />
<h:commandButton action="#{departamentoBean.cadastrarDepartamento}" value="Excluir" rendered="#{departamentoBean.departamento.idDepartamento > 0}" />
</h:panelGrid>
</h:form>
</ui:define>
</ui:composition>
Executo o primeiro commandButton e ele deixa o campo em branco caso o usuário deseje cadastrar um novo departamento ou preenche a descrição de um departamento já existente.
O problema é no segundo form pois independentemente de qual commandButton carrega, ao ser acionado, dá somente um refresh na xhtml. Não entra no DepartamentoBean de jeito nenhum.
package br.com.spi.agenda.mb;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.inject.Inject;
import br.com.spi.agenda.domain.Departamento;
import br.com.spi.agenda.service.DepartamentoService;
@RequestScoped
@ManagedBean
public class DepartamentoBean {
@Inject
private DepartamentoService departamentoService;
private Departamento departamento = new Departamento();
public void setDepartamento(Departamento departamento) {
this.departamento = departamento;
}
public Departamento getDepartamento() {
return departamento;
}
public List<SelectItem> getListaDepartamentos() {
try {
List<Departamento> departamentos = new ArrayList<Departamento>();
departamentos = departamentoService.getAll();
List<SelectItem> itens = new ArrayList<SelectItem>();
if(departamentos.size() > 0) {
for (Departamento d : departamentos) {
SelectItem item = new SelectItem(d.getIdDepartamento(), d.getDescricao());
itens.add(item);
}
return itens;
}else {
return null;
}
} catch (Exception e) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Sample warn message", "Watch out for PrimeFaces!"));
return null;
}
}
public String consultarDepartamento() {
try {
if(departamento.getIdDepartamento() > 0) {
departamento = departamentoService.getById(departamento.getIdDepartamento());
}else {
}
} catch (Exception e) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Sample warn message", "Watch out for PrimeFaces!"));
}
return "/manter-departamento.xhtml";
}
public String cadastrarDepartamento() {
FacesContext fc = FacesContext.getCurrentInstance();
try {
if(departamento.getDescricao().length() == 0) {
fc.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Informe a descrição do departamento", "Informe a descrição do departamento"));
}else {
departamentoService.save(departamento);
fc.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Sample warn message", "Departamento cadastrado com sucesso!"));
}
} catch (Exception e) {
fc.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Sample warn message", "Watch out for PrimeFaces!"));
}
return "/manter-departamento.xhtml";
}
}
No início funcionou legal. De uma hora para outra parou de funcionar.
PS: Tenho as libs do mojarra no path. Só que uso o Jboss 7 que também tem uma implementação no jsf. Quando tiro as minhas libs do path dá pau.