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

8 respostas
LeoCBS

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:
<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"/>
MBean:
public Cidade cidade;

//metodo que popula o selectOne de cidades
public void changeEstado() {
		this.cidades = this.cidadeController
				.populaCidadesByEstadoSelectItens(Integer
						.parseInt(this.idEstado));
}
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:
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();
	}

}

8 Respostas

LeoCBS

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?

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) {

LeoCBS

alguma dica ai galera?

valeu!

LeoCBS

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:
<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"/>
meu Bean
private Integer idCidade;
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) {
A

Nossa cara, me ajudou muito!!!

Tava com o mesmo erro!!!

Valeu!!!

jeferson_alves

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

J

Cara Ajudou pra Caralho! ValeU!

pauloads

Valeu cara, sua dica me ajudou bastante!

Criado 28 de março de 2012
Ultima resposta 18 de out. de 2013
Respostas 8
Participantes 5