JSF 2 - Problemas para chamar método da MB

1 resposta
edysnipes

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.

1 Resposta

Hebert_Coelho

Aparece alguma mensagem de error?

Criado 9 de dezembro de 2011
Ultima resposta 9 de dez. de 2011
Respostas 1
Participantes 2