Olá pessoal, estou de volta com um simples problema na aplicação que desenvolvo… Sei que o assunto é bastante abordado na internet com vários exemplos porém
li e reli vários tutoriais e não consegui resolver meu problema.
Preciso fazer um combo de select onde recupero os dados das empresas cadastradas no bd e listo no primeiro select, ao selecionar a empresa listo
os cargos referente a mesma no segundo select…
Consigo listar as empresas com facilidade, porém ao selecionar uma das empresas listadas não me é apresentado a lista correspondente de cargo
no segundo select.
Segue os códigos.
index.xhtml
<?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:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Cadastro</title>
</h:head>
<h:body>
<h:panelGrid id="grid" columns="1">
<h:outputLabel for="empresa" value="Empresa" />
<h:selectOneMenu id="empresa" value="#{empresaBean.empresa.nome}"
valueChangeListener="#{cargoBean.listCargoCombo(evento)}"
validatorMessage="Campo obrigatório" required="true" style="width:200px">
<f:selectItem itemLabel="Selecione uma empresa" itemValue="Nenhum" />
<f:selectItems value="#{empresaBean.listaEmpresa}" var="v"
itemValue="#{v.idEmpresa}" itemLabel="#{v.nome}"/>
<f:ajax event="change" render="cargo" />
</h:selectOneMenu>
<p:message for="empresa" />
<h:outputLabel for="cargo" value="Cargo" />
<h:selectOneMenu id="cargo" value="#{cargoBean.cargo.nomeCargo}"
validatorMessage="Campo obrigatório" required="true" style="width:200px">
<f:selectItem itemLabel="Selecione um cargo" itemValue="Nenhum" />
<f:selectItems value="#{cargoBean.listaCargosCombo}" var="c"
itemValue="#{c.idCargo}" itemLabel="#{c.nomeCargo}"/>
</h:selectOneMenu>
<p:message for="cargo" />
</h:panelGrid>
<br></br>
<br></br>
</h:body>
</html>
EmpresaBean
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Controller;
import FactoryMethod.FactoryDAO;
import Interface.IEmpresaDAO;
import Model.Empresa;
import java.awt.event.ActionEvent;
import java.io.Serializable;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
/**
*
* @author VIRTUALWEB
*/
@ManagedBean
@SessionScoped
public class EmpresaBean implements Serializable{
private IEmpresaDAO dao = (IEmpresaDAO) FactoryDAO.creatObject(Empresa.class);
private Empresa empresa = new Empresa();
private List<Empresa> listaEmpresa = null;
/*@PostConstruct
public void init() throws ParseException, SQLException {
listaEmpresa = this.dao.listarNomeEmpresa();
}*/
// Getters e Setters
public Empresa getEmpresa() {
return empresa;
}
public void setEmpresa(Empresa empresa) {
this.empresa = empresa;
}
public List<Empresa> getListaEmpresa() throws ParseException, SQLException {
return listaEmpresa;
}
public void setListaEmpresa(List<Empresa> listaEmpresa) {
this.listaEmpresa = listaEmpresa;
}
// Métodos
public void listarNomeEmpresas(ActionEvent e) throws ParseException, SQLException{
listaEmpresa= dao.listarNomeEmpresa();
}
}
CargoBean
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Controller;
import FactoryMethod.FactoryDAO;
import Interface.ICargoDAO;
import Model.Cargo;
import java.awt.event.ActionEvent;
import java.io.Serializable;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.event.ValueChangeEvent;
/**
*
* @author VIRTUALWEB
*/
@ManagedBean
@SessionScoped
public class CargoBean implements Serializable{
// Contrutora da Classe
public CargoBean() {
}
private ICargoDAO dao = (ICargoDAO) FactoryDAO.creatObject(Cargo.class);
private Cargo cargo = new Cargo();
private List<Cargo> listaCargo = null;
private List<Cargo> listaCargosCombo = null;
// Getters e Setters
public Cargo getCargo() {
return cargo;
}
public void setCargo(Cargo cargo) {
this.cargo = cargo;
}
public List<Cargo> getListaCargoCombo() {
return listaCargosCombo;
}
public void setListaCargoCombo(List<Cargo> listaCargoCombo) {
this.listaCargosCombo = listaCargoCombo;
}
public List<Cargo> getListaCargo() throws ParseException, SQLException {
return listaCargo;
}
public void setListaCargo(List<Cargo> listaCargo) {
this.listaCargo = listaCargo;
}
// Métodos
public void listCargoCombo(ValueChangeEvent evento) {
listaCargosCombo = new ArrayList();
listaCargosCombo = dao.Listar();
String idMarca = evento.getNewValue().toString();
}
}
Bom esses aí são partes dos códigos… Ao rodar a pagina index.xhtml aparece a lista das empresas e não os cargos…
Tentei debugar o sistema e percebi que ao selecionar a empresa o método listCargoCombo não é chamado…
Podem me ajudar?