Boa noite pessoal, critei dois beans:
public class Estado implements Serializable {
private String codigoEstado;
private String descricaoEstado;
// metodos get e set
}
public class Cidade implements Serializable {
private Long codigoCidade;
private String descricaoCidade;
private Estado estado;
// metodos get e set
}
Criei um TreeMap com os estados e outro para popular as cidades:
public TreeMap getListaEstados() throws Exception {
Session session = HibernateUtility.getSession();
TreeMap<String, String> mapTreeEstados = new TreeMap<String, String>();
Criteria criterio = session.createCriteria(Estado.class);
Iterator it = criterio.list().iterator();
while (it.hasNext()) {
Estado estado = (Estado) it.next();
mapTreeEstados.put(estado.getDescricaoEstado(), estado.getCodigoEstado());
}
return mapTreeEstados;
}
public void listaCidades(ValueChangeEvent valueChangeEvent) {
Session session = HibernateUtility.getSession();
mapTreeCidades.clear();
Criteria criteria = session.createCriteria(Cidade.class);
criteria.add(Expression.eq("estado", (Estado) session.load(Estado.class, String.valueOf(valueChangeEvent.getNewValue()))));
Iterator it = criteria.list().iterator();
while (it.hasNext()) {
Cidade cidade = (Cidade) it.next();
mapTreeCidades.put(cidade.getDescricaoCidade(), String.valueOf(cidade.getCodigoCidade()));
}
FacesContext.getCurrentInstance().renderResponse();
}
Ja na minha pagina eu estou fazendo assim:
<h:selectOneMenu id="estado"
onchange="submit();"
immediate="true"
converter="EstadoConverter"
valueChangeListener="#{Assinatura.listaCidades}"
value="#{Assinatura.empresa.estado}">
<f:selectItems value="#{Assinatura.listaEstados}" />
</h:selectOneMenu>
<h:selectOneMenu id="cidade"
converter="CidadeConverter"
value="#{Assinatura.empresa.cidade}">
<f:selectItems value="#{Assinatura.mapTreeCidades}" />
</h:selectOneMenu>
Criei dois Converters da seguinte maneira:
public class CidadeConverter implements Converter {
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) throws ConverterException {
Session session = HibernateUtility.getSession();
Cidade cidade = null;
try {
cidade = (Cidade) session.load(Cidade.class, new Long(arg2));
} catch (Exception e) {
System.out.print(e.getMessage());
}
return (Cidade) cidade;
}
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) throws ConverterException {
if (arg2 == null) {
return String.valueOf("");
}
return arg2.toString();
}
}
Quando seleciono um Estado estou recebendo a seguinte mensagem:
“estado”: Value is not a valid option.
Alguém sabe me falar oq estou fazendo de errado ?