Atualizar SelectItens

7 respostas
V

Olá amigos do GUJ,

Estou aprendendo JSF e ainda engatinhando…

Minha duvida é a seguinte: tenho dois selectOneMenu preenchidos com SelectItens, um para cidade e outro para estados, já consegui preencher eles com valores vindos do Banco de Dados, tudo certinho. Mas eu queria que o selectOneMenu de cidades mostrasse apenas as cidades do estado Selecionado(o banco já dá suporte pra isso)., e mudasse dinamicamente quando se muda o estado selecionado, entendem?

Desde já agradeço a ajuda;

7 Respostas

A

Entre no site www.k19.com.br e baixa gratuitamente a apostila do curso de JSF, lembro que fiz esse exemplo de lá.

Hebert_Coelho

Aqui tem exemplos simples de Ajax que poderão te dar uma idéia: JSF Exemplos Simples com Ajax.

V

Então pessoal, com a ajuda de voces meu problema está resolvido, ou quase.
Consegui com uma linha de ajax fazer o que precisava, porém na hora de enviar o formulario pelo botão salvar, o validador diz que o valor é invalidado pra cidade, vejam o trecho da pagina xhtml:

<h:outputLabel value="Estado" for="estado" />
			<h:selectOneMenu id="estados"
				value="#{usuarioBean.idEstadoSelecionado}">
				<f:selectItem itemValue="" itemLabel="Selecione" />
				<f:selectItems value="#{usuarioBean.estados}" />
				<f:ajax execute="@this" render="cidades" />
			</h:selectOneMenu>

			<h:outputLabel value="Cidade" for="cidade" />
			<h:selectOneMenu id="cidades"
				value="#{usuarioBean.idCidadeSelecionada}">
				<f:selectItems value="#{usuarioBean.cidades}" />
			</h:selectOneMenu>

e aqui o metodo salvar:

public String salvar() {

		FacesContext context = FacesContext.getCurrentInstance();
		
		if (!confirmarSenha.equals(usuario.getSenha())) {

			FacesMessage facesMessage = new FacesMessage("A senha não foi confirmada corretamente");
			context.addMessage(null, facesMessage);			
			return null;

		}
		
		Cidade cidade = null;
		for(Cidade c: cidadesObj){
			
			if(c.getId() == idCidadeSelecionada){ 
				cidade = c ;
				break;
			}
		}
		
		endereco.setCidade(cidade);
		usuario.setEndereco(endereco);
		
		new UsuarioRN().salvarUsuario(usuario);
		
		return "sucesso";
	}
Hebert_Coelho

Vc precisa de um converter. [=

V

Como assim? Não compreendo…

Hebert_Coelho

JSF: Converter e Bean Auto Complete

Talvez te ajude a entender melhor. [=

V

Então, li o material que indicou e também muita coisa na internet, creio ter entendido toda a teoria, mas na pratica to apanhando veja meu codigo:

xhtml:

<h:outputLabel value="Cidade" for="cidade" />
			<h:selectOneMenu id="cidades"
				value="#{usuarioBean.cidade}" converter="CidadeConverter">
				<f:selectItems value="#{usuarioBean.cidades}" var="c" itemValue="#{c.id}" itemLabel="#{c.nome}" />
			</h:selectOneMenu>

java, o getCidades()

public Cidade [] getCidades() {
					
		List <Cidade> aux = new CidadeDAO().buscarCidadesPorEstado(idEstadoSelecionado);
		cidades = (Cidade[]) aux.toArray(new Cidade[aux.size()]);
			
		return cidades;
	}

aqui o converter:

@FacesConverter("CidadeConverter")
public class CidadeConverter implements Converter {

	@Override
	public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {
		
		return new CidadeDAO().buscaCidadePorId(new Integer(value));
		
	}

	@Override
	public String getAsString(FacesContext arg0, UIComponent arg1, Object value) {
		
		return value.toString();
		
	}

O erro que dá é: Erro de validação: o valor não é válido
E mais uma coisa, o eclipse fica avisando que o Converter não está registrado

Criado 9 de fevereiro de 2012
Ultima resposta 10 de fev. de 2012
Respostas 7
Participantes 3