2
respostas

Integração com Ajax

Bom dia,

Estou tentando fazer uma tela de cadastro, com selectonemenu aninhados, com ao selecionar o estado, o combo de cidades sendo atualizado. Meu xhtml ficou da seguinte forma:

{

}

No entanto, o método estadoProducer.onEstadoChange, só funciona quando seleciono a opção de Selecione, com itemValue setado para "". Fora isso, nada acontece no meu sistema e o combo das cidades não é atualizado:

Abaixo meus controllers: { private static final long serialVersionUID = 1L;

private Estado estadoSelecionado;

@Inject private EstadoDAO estadoDao;

@Inject private CidadeDAO cidadeDao;

private List estados; private List cidades;

@PostConstruct public void init(){ System.out.println("[EstadoProducer]: criando um novo EstadoProducer"); }

public Estado getEstadoSelecionado() { return estadoSelecionado; }

public void setEstadoSelecionado(Estado estadoSelecionado) { System.out.println("estado selecionado"); System.out.println(estadoSelecionado.getNmEstado()); this.estadoSelecionado = estadoSelecionado; }

public List getCidades() { List cidadeslist = cidadeDao.getMunicipioPorEstado(27); ArrayList cidadesTemp = new ArrayList(cidadeslist.size()); for(Municipio m: cidadeslist){ cidadesTemp.add(new SelectItem(m, m.getNmMunicipio())); } cidades = cidadesTemp; return cidades; }

public void setCidades(List cidades) { System.out.println("Pegando as cidades"); System.out.println("Estado: " + estadoSelecionado.getNmEstado()); this.cidades = cidades; }

public void setEstados(List estados) { this.estados = estados; }

public List getEstados(){ List estadoslist = estadoDao.getAllEstados(); estados = new ArrayList(estadoslist.size()); for(Estado e: estadoslist){ estados.add(new SelectItem(e, e.getNmEstado())); } return estados; }

public void onEstadoChange(){ List cidadeslist = cidadeDao.getMunicipioPorEstado(24); ArrayList cidadesTemp = new ArrayList(cidadeslist.size()); for(Municipio m: cidadeslist){ cidadesTemp.add(new SelectItem(m, m.getNmMunicipio())); } cidades = cidadesTemp; } }

Não consigo entender o que está saindo errado. Como não tem nenhum exemplo do tipo no treinamento, poderiam me dar uma luz?

2 respostas
<h:outputLabel value="Estado:" for="soEstado" />
                    <p:selectOneMenu id="soEstado" value="#{estadoProducer.estadoSelecionado}" style="width:150px">
                        <p:ajax listener="#{estadoProducer.onEstadoChange}" update="soCidade" />
                        <f:selectItem itemLabel="Selecione" itemValue="" noSelectionOption="true" />
                        <f:selectItems value="#{estadoProducer.estados}"/>
                    </p:selectOneMenu>

                    <h:outputLabel value="Cidade:" for="soCidade" />
                    <p:selectOneMenu id="soCidade" value="#{timeController.timeSelecionado.cidade}">
                        <f:selectItem itemLabel="Selecione" itemValue="" noSelectionOption="true" />
                        <f:selectItems value="#{estadoProducer.cidades}" />
                    </p:selectOneMenu>
                    <p:commandButton ajax="false" value="Enviar" action="#{timeController.salvaTime}"/>

Tente implementar um converter.Segue um link para estudo: http://respostas.guj.com.br/41704-jsf---converter-para-receber-o-objeto-envia-lo-ao-managedbean. Já peguei casos que não executa o método e o erro era no caso a falta do converter, vale tentar essa solução.