Pessoal depois de muita pesquisa, muito quebrar a cabeça decidi abrir um tópico para tentar obter ajuda pra solucionar meu problema.
Não estou conseguindo fazer funcionar dois dependentes (estados e cidades) simples não?? mas não funciona…
Estou usando richfaces e facelets
O código do meu formulário no meu arquivo cadCliente.xhtml
<a4j:form>
<rich:panel header="Cadastro de Cliente" style="width: 615px">
<span jsfc="h:messages" showSummary="true" showDetail="true" style="color:green; font-size: 10px"/>
<br/> <h:outputText value="Endereço " size="20" style="font-weight:bold; font-size: 12px" />
<rich:separator height="2" lineType="double"/><br/>
<h:panelGrid columns="2" id="panel2" columnClasses="odd-row,even-row">
<h:outputText value="Uf" />
<h:column>
<a4j:region>
<h:selectOneMenu id="estado" value="#{estadoJPA.codestado}" immediate="true">
<f:selectItems value="#{estadoJPA.itemsEstado}"/>
<a4j:support event="onchange" ajaxSingle="true" reRender="cidade" action="#{cidadeJPA.trocaCidadesEstado}"/>
</h:selectOneMenu>
</a4j:region>
<br/>
</h:column>
<h:outputText value="Cidade" />
<h:column>
<a4j:region>
<h:selectOneMenu var="cidade" id="cidade" value="#{cidadeJPA.codcidade}" >
<f:selectItems value="#{cidadeJPA.itemsCidade}"/>
</h:selectOneMenu>
</a4j:region>
<br/>
</h:column>
</h:panelGrid>
</rich:panel>
</a4j:form>
O código que popula o select de ufs no meu Bean:
public List getListaEstados() {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
listaEstados = em.createNamedQuery("Estado.findAll").getResultList();
em.close();
return listaEstados;
}
List<SelectItem> itemsEstado;
public List<SelectItem> getitemsEstado() {
EstadoJpaController estJPA = new EstadoJpaController();
List<Estado> estados = estJPA.getListaEstados();
List<SelectItem> cadastro = new ArrayList<SelectItem>();
for (Estado est : estados) {
SelectItem itens = new SelectItem(est.getCodestado(), est.getDescricao());
cadastro.add(itens);
}
return cadastro;
}
O código que popula o select de cidades e que deveria atualiza-lo, no meu Bean:
public List getlistaCidades() {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
listaCidades = em.createNamedQuery("Cidade.findAll").getResultList();
em.close();
return listaCidades;
}
public List<SelectItem> itemsCidade;
public List<SelectItem> getitemsCidade() {
CidadeJpaController cidJPA = new CidadeJpaController();
List<Cidade> cidades = cidJPA.getlistaCidades();
List<SelectItem> cadastro = new ArrayList<SelectItem>();
for (Cidade cids : cidades) {
SelectItem itens = new SelectItem(cids.getCodcidade(), cids.getDescricao());
cadastro.add(itens);
}
return cadastro;
}
List<Cidade> encontrarCidadesPorEstado(String codEstado) {
EntityManager em = getEntityManager();
Query q = em.createNamedQuery("Cidade.findByCodestado");
q.setParameter("codestado", Integer.parseInt(codEstado));
em.close();
return q.getResultList();
}
public void trocaCidadesEstado(ValueChangeEvent event) {
// garantindo que o valor do combo de estados mudou
if (event.getNewValue() != event.getOldValue()) {
CidadeJpaController cidJPA = new CidadeJpaController();
List<SelectItem> selectestado = new ArrayList<SelectItem>();
List<Cidade> cidade = cidJPA.encontrarCidadesPorEstado(event.getNewValue().toString());
for (Cidade cid : cidade) {
SelectItem itens = new SelectItem(cid.getCodcidade(), cid.getDescricao());
selectestado.add(itens);
}
this.itemsCidade = selectestado;
}
}
Os dois selects são populados perfeitamente, mas o meu select de cidades não atualiza quando altero o de estados, ele continua com a listagem normal, com todas as cidades.
Quem tiver qualquer idéia do que pode ser, fico grato.