[Resolvido] Converter + ajax + selectOneMenu + JSF

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

}

Pessoal, consegui resolver o meu problema, o erro ocorria no conversor
Segue abaixo como funciona

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {

	if(value != null && !value.equals("")){
        	CidadeRN cidadeRN	=	new CidadeRN();
        	Cidade cidade		=	new Cidade();
        	cidade.setCidadeID(Integer.parseInt(value.toString()));
            cidade 				= 	cidadeRN.Obter(cidade);
            return cidade.getCidadeID().toString();  
	}
	return null;
       
}