Pessoal,
Estou tentando fazer um evento change, ajax, relacionando estado e cidade. Bom esta funcionando ate o momento que clico em “Selecione…” no estado e nao 'e execultado o metodo e o combo cidade fica preenchido com os valores que ja estavao e conseguentemente nao fica desabilitado. Entenderam?
Pesso uma ajuda de voces e agradeco desde ja pela colaboracao de todos.
Meu xhtml:
<h:outputLabel for="estado" value="Estado: *" />
<h:selectOneMenu id="estado" value="#{pessoaBean.estado.codigo}"
required="true" requiredMessage="Favor informar o Estado.">
<f:selectItem itemValue="#{pessoaBean.estado.codigo}" itemLabel="Selecione..." />
<f:selectItems value="#{pessoaBean.comboEstado}"/>
<f:ajax event="change" listener="#{pessoaBean.listarCidades}" render="cidade"/>
</h:selectOneMenu>
<p:message for="estado" />
<h:outputLabel for="cidade" value="Cidade: *" />
<h:selectOneMenu id="cidade" value="#{pessoaBean.cidade.codigo}"
required="true" requiredMessage="Favor informar a Cidade." disabled="#{!empty pessoaBean.cidade.codigo}">
<f:selectItem itemValue="" itemLabel="Selecione..." />
<f:selectItems value="#{pessoaBean.comboCidade}"/>
</h:selectOneMenu>
<p:message for="cidade" />
Meu Bean:
@ManagedBean(name = "pessoaBean")
@SessionScoped
public class PessoaBean {
Pessoa pessoa;
Estado estado;
Idioma idioma;
Cidade cidade;
public PessoaBean() {
pessoa = new Pessoa();
cidade = new Cidade();
estado = new Estado();
cidade.setEstado(new Estado());
pessoas = new ArrayList<Pessoa>();
EstadoBO estadoBO = new EstadoBO();
this.comboEstado = new ArrayList<SelectItem>();
for(Estado item : estadoBO.listar()) {
this.comboEstado.add(new SelectItem(item.getCodigo(),item.getNome()));
}
IdiomaBO idiomaBO = new IdiomaBO();
this.checkboxIdioma = new ArrayList<SelectItem>();
for(Idioma item : idiomaBO.listar()){
this.checkboxIdioma.add(new SelectItem(item.getCodigo(),item.getNome()));
}
}
public String listarCidades() {
CidadeBO cidadeBO = new CidadeBO();
this.comboCidade = new ArrayList<SelectItem>();
this.cidade.setEstado(this.estado);
for(Cidade item : cidadeBO.listar(cidade)){
this.comboCidade.add(new SelectItem(item.getCodigo(),item.getNome()));
}
return null;
}