Atualizar SelectItens

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;

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

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

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:

[code] <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>

[/code]

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



Vc precisa de um converter. [=

Como assim? Não compreendo…

JSF: Converter e Bean Auto Complete

Talvez te ajude a entender melhor. [=

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