selectOneMenu atualizando outro selectOneMenu problemas

1 resposta
M

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;
		}	
}

1 Resposta

M

Ah, e onde vocês estão vendo onde tem:

Long n = this.orgao.getEndereco().getCidade().getEstado().getCodigo();  
            Integer idEstado = Integer.valueOf(n.toString());

é pq o codigo do estado é tipo Long e o parametro da busca é do tipo int mais ja tentei mudar o modo do cast tbm, e nao deu certo.

Criado 15 de agosto de 2012
Ultima resposta 15 de ago. de 2012
Respostas 1
Participantes 1