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