Solución a «Error de validación: el valor no es válido.» en PrimeFaces

selectone

Llevaba unos días que no lograba solucionar el error de validación de tipo de datos en un formulario trabajando con PrimeFaces. Parecía un error inexplicable, y me estaba dando bastantes quebraderos de cabeza, pues todo estaba aparentemente bien…

errorPor un lado tenía mi clase Municipios.java, mi converterMunicipios.java con sus métodos getAsObject y getAsString, y mi vista xhtml llamando a un componente <p:selectOneMenu> el cual me traía la lista, y por más que intentaba guardar siempre recibía el error de validación => «Error de validación: el valor no es válido».

Pues bien, si estás en este punto, la solución es sobreescribir los respectivos métodos equals(Object object) y hashCode()«

@Override
    public int hashCode() {
        int hash = 0;
	hash += (idMunicipio!= null ? idMunicipio.hashCode() : 0);
	return hash;
	}

@Override
    public boolean equals(Object object) {
        if (!(object instanceof Municipios)) {
            return false;
        }
        Municipio other = (Municipio) object;
        if ((this.idMunicipio == null && other.idMunicipio != null) || (this.idMunicipio != null && !this.idMunicipio.equals(other.idMunicipio))) {
            return false;
        }
        return true;
    }

Como veis es una solución bien sencilla, pero hay que conocerla. Espero que os sirva de ayuda.

Autor: Jorge Bastida Cano

Programador de Software y Apasionado de las nuevas tecnologías.

6 opiniones en “Solución a «Error de validación: el valor no es válido.» en PrimeFaces”

  1. Excelente muchas gracias por el aporte, tenia la solución en las narices.
    Agrego lo siguiente si es que alguien mas tenia el mismo mensaje de error
    En mi caso yo llenaba el List desde Hibernate haciendo un Join , en la clase convert llamaba a buscar ya sin el join(una lista de articulos por empresa) lo cual me devolvía un hascode distinto, de todas maneras al agregarle ese join igual el hascode no era igual al de la lista de SelectOneMenu, lo cual al cambiar el metodo equals y hascode ya solo depende de los propios atributos del objeto y ya no de otras entidades relacionadas que pueda tener.

    Ver ejemplo tambien en:
    (En el ejemplo e esta entidad sobreescriben los metodos, equals , compareTo , toString, el cual no me habia percatado, tal vez si la entidad no hubiese tenido relaciones no hubiese tenido el mensaje de error en cuestion)
    https://github.com/primefaces/primefaces/blob/master/primefaces-showcase/src/main/java/org/primefaces/showcase/domain/Country.java

    https://github.com/primefaces/primefaces/blob/master/primefaces-showcase/src/main/webapp/ui/input/oneMenu.xhtml

    https://github.com/primefaces/primefaces/blob/master/primefaces-showcase/src/main/java/org/primefaces/showcase/convert/CountryConverter.java

    1. Buenos días ArtEze,
      Gracias por tu comentario. El post tiene ya su tiempo, habría que valorar el contexto del error e investigar su solución.

      Mucha suerte y te invito a compartir dicha solución cuando la encuentres.

      Saludos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.