Caros colegas,
Gostaria de saber se alguém já passou pelo mesmo problema e conseguiu fazer funcionar? Trata-se de uma combinação simples de 2 selects. Busquei incansavelmente algum exemplo, entretanto não consegui encontrar (com jsf 2). No forum existem bastante tópicos mas não consegui encontrar nenhum que funcionasse.
O atributo ‘valueChangeListener’ do componente h:selectOneMenu, não chega nem a chamar o método ufChangeListener(ValueChangeEvent e) no bean. Deve haver algum problema no javascript do framework.
pagina.xhtml
<h:form id="form-cidades-uf">
<h:selectOneMenu id="sob-ufs"
value="#{cidadeUFComboBean.selecUF}"
onchange="submit()"
immediate="true"
valueChangeListener="#{cidadeUFComboBean.ufChangeListener}">
<f:selectItem itemLabel="-- Selecione a uf -- " itemValue="Nenhuma"/>
<f:selectItems value="#{cidadeUFComboBean.ufs}" var="u" itemValue="#{u}" itemLabel="#{u.sigla}"/>
<f:ajax event="change" render="sob-cidades @form"/>
</h:selectOneMenu>
<h:selectOneMenu id="sob-cidades"
value="#{cidadeUFComboBean.selecCidade}" >
<f:selectItem itemLabel="-- Selecione a cidade -- " itemValue="Nenhuma"/>
<f:selectItems value="#{cidadeUFComboBean.cidades}" var="c" itemValue="#{c}" itemLabel="#{c.nome}"/>
<f:ajax />
</h:selectOneMenu>
</h:form>
O Bean:
// Cidade selecionada
private EnderecoCidade selecCidade;
public EnderecoCidade getSelecCidade() {
return selecCidade;
}
public void setSelecCidade(EnderecoCidade selecCidade) {
this.selecCidade = selecCidade;
}
// Cidades do estado selecionado
private List<EnderecoCidade> cidades;
public List<EnderecoCidade> getCidades() {
lookup.getCidDao().list(selecUF);
return cidades;
}
// UF selecionada
private EnderecoUF selecUF;
public EnderecoUF getSelecUF() {
return selecUF;
}
public void setSelecUF(EnderecoUF selecUF) {
this.selecUF = selecUF;
}
// UFs
private List<EnderecoUF> ufs;
public List<EnderecoUF> getUfs() {
if(ufs==null){
ufs = lookup.getUfDao().list();
}
return ufs;
}
public void ufChangeListener(ValueChangeEvent e){
selecUF = (EnderecoUF) e.getNewValue();
cidades = getCidades();
System.out.println("ufChangeListener: uf="+selecUF.getSigla()+", listou "+cidades.size()+" cidades...");
}
Desde já agradeço,
Um grande abraço,