Bem, antes de mais nada, já tentei varios e varios metodos que estão aqui no forum e nenhum deles funcionou para mim, então vou postar meu codigo e ver se alguem tem alguma solução.
pessoal, ja tentei varias atualizações via ajax mais até agora nao obtive sucesso, o unico que consegue aparecer é o de estado, porem quando eu seleciono o estado nao está atualizando o de cidades, como vocês podem ver estou utilizando o this.orgao.getEndereco().getCidade().getEstado().getCodigo(); no getSelecionar cidades pq ao selecionar o estado ele está inserindo no this.orgao.getEndereco().getCidade().getEstado(), entao estou pegando o codigo desse estado e passando como parametro para listar as cidades desse estado. Caso alguem saiba uma maneira de me ajudar, fico grato.
No .xhtml
<h:outputLabel value="*UF:"/>
<h:selectOneMenu value="#{orgaoBean.orgao.endereco.cidade.estado}" >
<f:selectItems value="#{orgaoBean.selecionarEstado}" />
<p:ajax update="cidade" />
</h:selectOneMenu>
<h:outputLabel value="*Cidade:"/>
<h:selectOneMenu id="cidade" value="#{orgaoBean.orgao.endereco.cidade}">
<f:selectItems value="#{orgaoBean.selecionarCidade}" var="cidade" itemLabel="#{cidade.nome}" itemValue="#{cidade}" />
</h:selectOneMenu>
No bean (completo)
package br.com.idea.dilicita.beans;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import br.com.idea.dilicita.exception.DilicitaException;
import br.com.idea.dilicita.facade.DilicitaFacade;
import br.com.idea.dilicita.model.Cidade;
import br.com.idea.dilicita.model.Estado;
import br.com.idea.dilicita.model.Orgao;
import br.com.idea.dilicita.model.TipoOrgao;
@ManagedBean(name="orgaoBean")
@ViewScoped
public class OrgaoBean {
private Orgao orgao = new Orgao();
private Estado estado = new Estado();
private List<Orgao> lista = null;
private List<TipoOrgao> listarTipoOrgao = null;
private List<SelectItem> selecionarEstado;
private List<SelectItem> selecionarCidade;
private String salvar() {
try {
DilicitaFacade orgaoRN = new DilicitaFacade();
orgaoRN.salvarOrgao(orgao);
this.lista = null;
} catch (DilicitaException e) {
e.printStackTrace();
}
return null;
}
private void excluir() {
try {
DilicitaFacade orgaoRN = new DilicitaFacade();
orgaoRN.excluirOrgao(orgao);
this.lista = null;
} catch (DilicitaException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public List<Orgao> getLista() {
if(this.lista == null) {
try {
DilicitaFacade orgaoRN = new DilicitaFacade();
this.lista = orgaoRN.listarOrgaos();
} catch (DilicitaException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return lista;
}
public Orgao getOrgao() {
return orgao;
}
public void setOrgao(Orgao orgao) {
this.orgao = orgao;
}
public List<TipoOrgao> getListarTipoOrgao() {
if(listarTipoOrgao == null) {
try {
DilicitaFacade orgaoRN = new DilicitaFacade();
this.listarTipoOrgao = orgaoRN.listarTiposOrgaos();
} catch (DilicitaException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return listarTipoOrgao;
}
public List<SelectItem> getSelecionarEstado() {
DilicitaFacade orgaoRN = new DilicitaFacade();
List<SelectItem> itens = new ArrayList<SelectItem>();
itens.add(new SelectItem(null, "Selecione o estado"));
try {
for (Estado est : orgaoRN.listarEstados()) {
SelectItem se = new SelectItem();
se.setValue(est);
se.setLabel(est.getUF());
itens.add(se);
}
} catch (DilicitaException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return itens;
}
public List<SelectItem> getSelecionarCidade() {
List<SelectItem> itens = new ArrayList<SelectItem>();
Long n = this.orgao.getEndereco().getCidade().getEstado().getCodigo();
Integer idEstado = Integer.valueOf(n.toString());
itens.add(new SelectItem(null, "Selecione a cidade"));
try {
DilicitaFacade orgaoRN = new DilicitaFacade();
for (Cidade cid : orgaoRN.listarCidades(idEstado)) {
SelectItem se = new SelectItem();
se.setValue(cid);
se.setLabel(cid.getNome());
itens.add(se);
}
return itens;
} catch (DilicitaException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public Estado getEstado() {
return estado;
}
public void setEstado(Estado estado) {
this.estado = estado;
}
}