[RESOLVIDO] Erro de validação: o valor não é válido + JSF 2 + Primefaces 3

Boa tarde galera… estou com este erro de validação em um selectOneMenu de Cidade… populo ele após a seleção de Estado…

já tentei de tudo… fiz converter… implementei equals e hasCode…

alguma dica galera? já perdi um tempão aqui…

Muito obrigado pela ajuda!

xhtml:

[code]
<h:outputLabel value=“Estado:” for=“estado” />
<p:selectOneMenu id=“estado” style=“width:300px;”>
<f:selectItem itemLabel=“Selecione…” itemValue=""/>
<f:selectItems value="#{usuarioBean.estados}" required=“true” requiredMessage=“Este campo é obrigatório”/>
<p:ajax update=“cidade” listener="#{lugarBean.changeEstado}"/>
</p:selectOneMenu>
<p:message for=“estado” display=“text”/>

			<h:outputLabel value="Cidade:" for="cidade" />
			<p:selectOneMenu id="cidade" style="width:300px;" value="#{lugarBean.cidade}" converter="converterCidade">
				<f:selectItem itemLabel="Selecione..." itemValue=""/>
				<f:selectItems value="#{lugarBean.cidades}" var="cidade" itemValue="#{cidade}" itemLabel="#{cidade.dsCidade}"/>
			</p:selectOneMenu>
			<p:message for="cidade" display="text"/>[/code]

MBean:

[code]public Cidade cidade;

//metodo que popula o selectOne de cidades
public void changeEstado() {
this.cidades = this.cidadeController
.populaCidadesByEstadoSelectItens(Integer
.parseInt(this.idEstado));
}[/code]

EJB:

@SuppressWarnings("unchecked") public List<SelectItem> populaCidadesByEstadoSelectItens(Integer idEstado) { List<SelectItem> retorno = new ArrayList<SelectItem>(); Query q = entityManager .createQuery("SELECT cidade FROM " + Cidade.class.getSimpleName() + " cidade INNER JOIN cidade.estado estado where estado.idEstado = ?"); q.setParameter(1, idEstado); ArrayList<Cidade> cidades = (ArrayList<Cidade>) q.getResultList(); for (Cidade cidade : cidades) { retorno.add(new SelectItem(cidade.getIdCidade(), cidade .getDsCidade())); } return retorno; }

Converter:

[code]

import javax.ejb.EJB;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

import br.com.lugarcerto.business.local.CidadeBBusinessLocal;

@FacesConverter(“converterCidade”)
public class ConverterCidade implements Converter {

@EJB
private CidadeBBusinessLocal cidadeController;

@Override
public Object getAsObject(FacesContext context, UIComponent component,
		String value) {
	if (value != null && !value.equals("")) {
		return this.cidadeController.findCidade(new Integer(value));
	}
	return null;
}

@Override
public String getAsString(FacesContext context, UIComponent component,
		Object value) {
	return value.toString();
}

}[/code]

o estranho é que meu código:

@Override public Object getAsObject(FacesContext context, UIComponent component, String value) { if (value != null && !value.equals("")) { return this.cidadeController.findCidade(new Integer(value)); } return null; }

retorna corretamente um objeto Cidade…

como pode reclamar que não é um valor válido?

percebi outra coisa pessoal,

o Object que chega ao meu equals está null…

é assim ou tem algo errado?

@Override public boolean equals(Object obj) {

alguma dica ai galera?

valeu!

resolvi galera… abaixo comentei que meu equal recebia um parâmetro null…

era pq meu escopo estava de request… alterei para escopo de sessão e resolveu…

também não precisei de Converter… é o meu método de negócio que busca a cidade a partir do identificador…

como ficou:

[code]
<h:outputLabel value=“Estado:” for=“estado” />
<p:selectOneMenu id=“estado” style=“width:300px;”>
<f:selectItem itemLabel=“Selecione…” itemValue=""/>
<f:selectItems value="#{usuarioBean.estados}" required=“true” requiredMessage=“Este campo é obrigatório”/>
<p:ajax update=“cidade” listener="#{lugarBean.changeEstado}"/>
</p:selectOneMenu>
<p:message for=“estado” display=“text”/>

    <h:outputLabel value="Cidade:" for="cidade" />  
    <p:selectOneMenu id="cidade" style="width:300px;" value="#{lugarBean.idCidade}">  
        <f:selectItem itemLabel="Selecione..." itemValue=""/>  
        <f:selectItems value="#{lugarBean.cidades}"/>  
    </p:selectOneMenu>  
    <p:message for="cidade" display="text"/> [/code]

meu Bean

private Integer idCidade;

[quote=LeoCBS]percebi outra coisa pessoal,

o Object que chega ao meu equals está null…

é assim ou tem algo errado?

@Override public boolean equals(Object obj) {[/quote]

1 curtida

Nossa cara, me ajudou muito!!!

Tava com o mesmo erro!!!

Valeu!!!

Amigo, estou passando por isto, como ficou seu DAO? me da uma ajuda aí por favor…

Cara Ajudou pra Caralho! ValeU!

Valeu cara, sua dica me ajudou bastante!