Boa noite pessoal, estou precisando de uma ajuda de vocês
Tenho uma formulario para cadastro de clientes, neste formulario, tenho um campo para a seleção de estado/cidade
O meu problema ocorre ao tentar converter o campo de cidade para a classe cidade, este problema ocorre porque o selectOneMenu é populado sem o atributo value nos options.
Obs.: Se eu tirar o converter o atributo é gerado certinho.
Já configurei todos os hashCode e equals, mas mesmo assim não funciona.
Abaixo irei colocar meu form, bean e o converter
form
<h:outputLabel value=“Estado” for=“Estado” />
<p:selectOneMenu id=“Estado” value="#{ProjetoBean.estadoID}" >
<f:selectItems value="#{EstadoListagemBean.listaEstado}" var=“estado” itemLabel="#{estado.nome}" itemValue="#{estado.estadoID}"/>
<p:ajax update=“Cidade” listener="#{ProjetoBean.ListaCidadaPorEstado}" />
</p:selectOneMenu>
<h:outputLabel value=“Cidade” for=“Cidade”/>
<p:selectOneMenu id=“Cidade” value="#{ClienteCadastroBean.endereco.cidade}" converter=“CidadeConverter”>
<f:selectItems value="#{ProjetoBean.cidades}" var=“cidade” itemLabel="#{cidade.nome}" itemValue="#{cidade}" />
</p:selectOneMenu>
Bean responsavel pelo ajax
@ManagedBean(name=“ProjetoBean”)
@ViewScoped
public class ProjetoBean {
private List<Cidade> listaCidade;
private SortedMap<String,Object> cidades = new TreeMap<String,Object>();
private String estadoID;
public void ListaCidadaPorEstado() {
Estado estado = new Estado();
Cidade cidade = new Cidade();
CidadeRN cidadeRN = new CidadeRN();
estado.setEstadoID(Integer.parseInt(this.estadoID));
cidade.setEstado(estado);
this.listaCidade = cidadeRN.Pesquisar(cidade, "nome", "asc", null, null);
this.cidades.clear();
for(Cidade cidadeRetorno : this.listaCidade){
this.cidades.put(cidadeRetorno.getNome(),new Integer(cidadeRetorno.getCidadeID()));
}
}
public String getEstadoID() {
return estadoID;
}
public void setEstadoID(String estadoID) {
this.estadoID = estadoID;
}
public SortedMap<String, Object> getCidades() {
return cidades;
}
}
converter
public class CidadeConverter implements Converter{
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if ( (value != null) && (value.trim().length() > 0)) {
Integer cidadeID = Integer.valueOf(value);
try {
CidadeRN cidadeRN = new CidadeRN();
Cidade cidade = new Cidade();
cidade.setCidadeID(cidadeID);
return cidadeRN.Obter(cidade);
} catch (Exception e) {
throw new ConverterException("Erro ao efetuar a conversão da classe cidade" + value + "." + e.getMessage());
}
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if(value != null && !value.equals("")){
if (value instanceof Cidade) {
Cidade cidade = (Cidade) value;
return cidade.getCidadeID().toString();
}
}
return null;
}
}