Validation Error: Value is not valid

9 respostas
smorigo

Boa noite pessoal, tenho uma aplicação utilizando JSF, Spring e Hibernate, duas Entidades CLIENTE e SEGMENTO, mantenho entre as duas um relacionamento de 1-N.

Quando tento submeter meu Converter ele está mostrando a bendita mensagem de Validation Error: Value is not valid.

Meu Converter está da seguinte maneira:

public class SegmentoConverter implements Converter {

	public Object getAsObject(FacesContext facesContext, UIComponent arg1, String arg2) throws ConverterException {
		
	     if (arg2 == null) {
	            return null;
	        }
		
	    Long codigo = new Long(arg2);
	     
		Segmento segmento = new Segmento();		
		SegmentoWeb segmentoWeb = (SegmentoWeb) facesContext.getApplication().getVariableResolver().resolveVariable(facesContext, "Segmento");
		segmento = (Segmento) segmentoWeb.carregaSegmento(codigo);
		
		System.out.println("SEGMENTO ENCONTRADO: " + segmento.getNomeSegmento());
		System.out.println("CÓDIGO SEGMENTO ENCONTRADO: " + segmento.getCodigoSegmento());
		
		return segmento;
	}

	public String getAsString(FacesContext arg0, UIComponent arg1, Object object) throws ConverterException {
		if (object == null) {
			return String.valueOf("");
		}
		return object.toString();
	}

}

A classe SegmentoWeb é onde mantenho os metodos que retornam o TreeMap para popular o SelectOneMenu e o metodo que recupera o Segmento selecionado.

Alguém sabe me falar se devo fazer de uma forma diferente está recuperação do segmento selecionado ? já não sei oq fazer…

9 Respostas

wagner.gs

Provavelmente esta solução não serve pra você, mas ainda pode ajudar alguém.
Quando acontecer esse problema, adicione o equal e hashcode na classe do converter, no caso do problema assim deve-se colocar os 2 métodos na classe: Segmento.

Abraços

rponte

O problema pode ser exatamente este que o wagner comentou acima. Para mais detalhes você pode ver aqui,
http://www.rponte.com.br/2008/02/01/selectonemenu-converter-erro-de-validacao/

Abraços e boa sorte.

M

tenho um problema parecido, tentei sobrescrever equals e hashcode e continuou a mesma coisa.

tentei sobrescrever na classe usada pelo converter

tem alguma maneira especial de gerar esses metodos? eu gerei automatico pelo Eclipse…

abs

M

resolvi !!
no jeitinho brasileiro :smiley:

Fiz o equals retornar true na marra… coloquei apenas “return true” e rolou.

E o hashcode permaneceu o mesmo que o eclipse gerou

Gostaria de solucionar na forma correta mas se nao conseguir vai ficar assim mesmo…

abs!

paulofernandesjr

opa

cara esse erro ocorre pelo seguinte motivo…

o seu converter está capturando o objeto, o metodo que monta a sua lista esta capturando diferente, por isso ocorre o erro

quando você manda gerar o equals e o hashCode pelo eclipse, ele especifica quais campos você quer usar para comparar

ai é que você descobre o problema, se não entender responde que vamos conversando

abraço

M

obrigado pela dica
acho que entendi, vou testar aqui e retorno
valeu!

renanreismartins

paulofernandesjr

man, estou com um problema similar e acho acho que vc tem a solucao.

Debuguei meu equals e la descobri que ele sempre compara meu objeto atual (o realmente escolhido na lista) com o primeiro adicionado a lista.

adiciono os itens da seguinte forma:

public List<SelectItem> getProdutos() {
		List<SelectItem> produtos = new ArrayList<SelectItem>();

		Produto selecione = new Produto(0L, "Selecione");

		produtos.add(new SelectItem(selecione, selecione.getNome()));

		Empresa empresa = this.chamado.getEmpresa();

		if (empresa != null) {
			empresa = empresaDAO.getById(empresa.getId());

			for (Produto produto : empresa.getProdutos()) {
				produtos.add(new SelectItem(produto, produto.getNome()));
			}
		}

		return produtos;
	}

entao ele sempre compara o obj escolhido com o “selecione”

alguma sugestao?

reparei tb o seguinte: na primeira chamada ao metodo ele retorna apenas o obj “selecione” em uma segunda chamada ele retorna o selecione e mais alguns objs trazidos do banco, ai ocorre o erro x(

abrassss

M

Melhorei meu equals porque o selectOneMenu nao funcionou com a gambiarra antiga :lol:

Mas o que nao entendo é que no meu caso a coisa nao se comporta como tenho lido por aí.

Eu tive que implementar o equals da seguinte forma na classe PEPNivel1 pra fazer meu selectOneMenu funcionar direito dentro de um DataTable:

@Override
public boolean equals(Object obj) {
     return this.getPkpepnivel1().equals(obj);
}

Sendo que getPkpepnivel1() retorna um Integer. Ou seja, o meu Object obj nao esta recebendo uma instancia de PEPNivel1 e sim uma instancia de Integer (da chave usada pra montar o combo box). Meu converter manda o objeto mas mesmo assim ele usa o Integer para fazer o equals e nao o meu objeto.

Alguem sabe porque? Eu sinto que essa nao é a melhor solução pois o equals() nao esta comparando os objetos PEPNivel1 corretamente e sim os valores das chaves, mas vou mante-la até conseguir melhorar. Segue o Converter abaixo.

public class PEPNivel1Converter implements Converter{

	@Override
	public Object getAsObject(FacesContext context, UIComponent component, String value) {
		
		try{
			int pkpepnivel1 = Integer.parseInt(value);
			PEPNivel1 pepnivel1 = (new PEPNivel1()).getByid(pkpepnivel1);
			return pepnivel1;
		}
		catch(Exception e){
			throw new ConverterException(e);
		}
	}

	@Override
	public String getAsString(FacesContext context, UIComponent component, Object obj) {
		
		try{
			
			return obj.toString();
		}
		catch(Exception e){
			throw new ConverterException(e);
		}

	}

}
murilo_scool

olá senhores,

gostaria de saber se alguém já teve o problema com a propriedade “valueChangeListener”
não ocorre nada quando mudo o valor do componente, não invoca o método passado!
será alguma configuração que possa estar faltando, ou algum componente?!?

<h:outputText value="Estado:"/> <h:selectOneMenu id="selectInputUnidadeFederativa" valueChangeListener="unidadeService.createSearch" > <f:selectItem itemLabel="Selecione um estado" /> <f:selectItems value="#{beanUnidadeFederativa.listaUF}" var="uf" itemLabel="#{uf.nome}" itemValue="#{uf}" /> </h:selectOneMenu>

outra coisa, quando submeto o form, dá o bendito erro: “Validation Error: Value is not valid”
estou utilizando JSF 2.0 + Facelets

Se puder contribuir, agradeço.

Criado 17 de abril de 2007
Ultima resposta 8 de jun. de 2010
Respostas 9
Participantes 7