Pessoal, tive que assumir uma tarefa que não me copetia em tempos normais, mas a crise me deu esse presente. Seguinte, existe um sistema na empresa totalmente em JSP bd Postgresql e surgiu uma nova demanda para que os funcionários fizessem um cadastro com itens que já existem no BD, e o chefe disse para fazer em combobox, de forma que o usuário somente escolha os itens ofertados pelo BD. Otimo, achei algo perfeito para mim, testei do blog do Sérgio Fantim https://serjaum.wordpress.com/2009/08/28/jsf-tutorial-combos-aninhados-estadoscidades/ e estava perfeito demais, somente um erro acontece: consigo, usando o exemplo de Pais Estado cidade receber a lista do primeiro e do segundo em relação ao primeiro, mas não do terceiro. Consegui inciar a lista do Pais e através do Pais pegar o Estado, mas ele não chama as cidades. Um fato é que o erro pode estar no parametro reRender mas não consigo resolver. Alguem poderia me ajudar
Abaixo os codigos
MB
package util;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;
import dao.ListarDAO;
import modelo.Cidades;
import modelo.Estados;
import modelo.Pais;
public class Combo implements Serializable {
private static final long serialVersionUID = -4281390476508498320L;
private List<SelectItem> cidades = new ArrayList<SelectItem>();
private List<SelectItem> estados = new ArrayList<SelectItem>();
private List<SelectItem> pais = new ArrayList<SelectItem>();
private Estados estado = new Estados();
private Cidades cidade = new Cidades();
private Pais pai = new Pais();
public List<SelectItem> getPais(){
ListarDAO dao = new ListarDAO();
List<Pais> lista = dao.ListarPais();
List<SelectItem> item = new ArrayList<SelectItem>(lista.size());
for(Pais a : lista){
item.add(new SelectItem(a.getId(), a.getNome()));
}
return item;
}
public void actionCarregaEstados(){
this.estados = this.getEstadoByPais();
}
public List<SelectItem> getEstadoByPais(){
ListarDAO dao = new ListarDAO();
List<Estados> lista = dao.ListarEstados(this.pai.getId());
List<SelectItem> itens = new ArrayList<SelectItem>(lista.size());
for(Estados s : lista){
itens.add(new SelectItem(s.getId(), s.getNome()));
}
return itens;
}
public void actionCarregaCidades(){
this.cidades = this.getCidadesByEstado();
}
public List<SelectItem> getCidadesByEstado(){
ListarDAO dao = new ListarDAO();
List<Cidades> cidades = dao.ListarCidades(this.estado.getId());
List<SelectItem> items = new ArrayList<SelectItem>(cidades.size());
for(Cidades c : cidades){
items.add(new SelectItem(c.getId(), c.getNome()));
}
return items;
}
public List<SelectItem> getCidades() {
return cidades;
}
public List<SelectItem> getPaiss(){
return pais;
}
public List<SelectItem> getEstados(){
return estados;
}
public void setCidade(Cidades cidade) {
this.cidade = cidade;
}
public void setEstado(Estados estado){
this.estado = estado;
}
public void setPais(Pais pai){
this.pai = pai;
}
public Estados getEstado() {
return estado;
}
public Cidades getCidade() {
return cidade;
}
public Pais getPai(){
return pai;
}
}
JSP
<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>
<%@ taglib prefix=“f” uri=“http://java.sun.com/jsf/core”%>
<%@ taglib prefix=“h” uri=“http://java.sun.com/jsf/html”%>
<%@ taglib prefix=“rich” uri=“http://richfaces.ajax4jsf.org/rich”%>
<%@ taglib prefix=“a4j” uri=“http://richfaces.org/a4j”%>
<h:panelGrid columns="2">
<h:outputLabel for="pai" value="Pais " />
<h:selectOneMenu id="pai" value="#{Combo.pai.id}">
<f:selectItem itemValue="#{null}" itemLabel="Selecione..." />
<f:selectItems value="#{Combo.pais}" />
<a4j:support event="onchange" ajaxSingle="true" action="#{Combo.actionCarregaEstados}" reRender="estado,cidade"/>
</h:selectOneMenu>
<h:outputLabel for="estado" value="Estados " />
<h:selectOneMenu id="estado" value="#{Combo.estado.id}">
<f:selectItem itemValue="#{null}" itemLabel="Selecione..." />
<f:selectItems value="#{Combo.estados}" />
<a4j:support event="onchange" ajaxSingle="true" action="#{Combo.actionCarregaCidades}" reRender="cidade"/>
</h:selectOneMenu>
<h:outputLabel for="cidade" value="Cidades " />
<h:selectOneMenu id="cidade" value="#{Combo.cidade.id}">
<f:selectItem itemValue="#{null}" itemLabel="Selecione..." />
<f:selectItems value="#{Combo.cidades}" />
</h:selectOneMenu>
</h:panelGrid>
</h:form>
</f:view>
PS.: No sistema que teremos que entregar para os usuários, serão 5 combox aninhados, então se me ajudarem a passar para o terceiro, eu consigo o restante