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…
Por 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.
Gracias, me soluciono el mismo problema
Gracias a ti, me alegro de que se solucionara tu problema.
Un saludo
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
Gracias a ti Javier, genial que te sirva la información.
Un saludo
Tengo eso y sigue sin funcionar
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