with passing pass parameter pages outcome getrequestparametermap getexternalcontext getcurrentinstance fparam bean jsf tomcat jsf-2 bean-validation

passing - Bean Validation @NotNull, @NotBlank y @NotEmpty no funciona en JSF+Tomcat



pass parameter to bean jsf (3)

Estoy usando anotaciones de Hibernate Validation en mi bean administrado JSF. Cuando uso @NotNull , @NotBlank o @NotEmpty , parece que no se activan de ninguna manera.

@NotBlank(message = "{name.required}") public String name;

Ver:

<h:outputLabel value="Name:" /> <h:inputText id="name" value="#{person.name}" size="20" /> <h:message for="name" style="color:red" />

¿Cómo es esto causado y cómo puedo resolverlo?


Introducción

Ya que no me dio ningún comentario sobre mi comentario con la pregunta qué contenedor está usando, eché un vistazo en su historial de preguntas para saber qué contenedores están usando todos. Hasta donde encontré solo a Tomcat . Así que, para esta respuesta, supongo que de hecho estás usando Tomcat como inicialmente lo imaginé al publicar el comentario.

Asegúrate de instalar todos los JAR

Tomcat no incluye ninguna API / implementación de validación de frijol JSR303. Debe descargarlo e instalarlo usted mismo. Que hayas compilado esas anotaciones significa que has eliminado correctamente el archivo hibernate-validator.jar (los nombres pueden diferir según la versión) en la carpeta /WEB-INF/lib de tu aplicación web. Que esas anotaciones a su vez no parezcan funcionar de ninguna manera solo puede significar que no leyó el readme.txt y / u olvidó agregar los archivos JAR de la carpeta /lib/required del archivo zip / tgz de la biblioteca de Hibernate Validator : slf4j-api.jar y validation-api.jar . El último es obligatorio para que las anotaciones realmente funcionen. Por lo tanto, para que Hibernate Validator funcione en Tomcat, necesita los siguientes JAR en webapp /WEB-INF/lib :

  • validation-api.jar (contiene la API abstracta y el escáner de anotaciones)
  • hibernate-validator.jar (contiene la implementación concreta)
  • slf4j-api.jar (solo para hacer que su registrador funcione también)

De esta forma, @NotBlank y @NotEmpty deben funcionar. El @NotNull merece una atención especial; los campos de entrada vacíos se reciben por defecto como cadenas vacías del cliente (navegador web) debido a la naturaleza de los parámetros de solicitud de HTTP. Las cadenas vacías no son lo mismo que null , por lo que la @NotNull nunca se activará de manera predeterminada. Sin embargo, JSF se puede configurar para interpretarlas como null simplemente agregando el siguiente parámetro de contexto a web.xml :

<context-param> <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name> <param-value>true</param-value> </context-param>

De esta forma, @NotNull debe funcionar también.

BV funciona pero solo campos vacíos

Si todavía no funciona (es decir, ninguna de las 3 anotaciones funciona, pero otras como @Size(min=5) para una longitud mínima de 5 funciona bien), entonces es probable que tengas el siguiente parámetro de contexto en la web.xml también:

<context-param> <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name> <param-value>false</param-value> </context-param>

A continuación, debe eliminarlo (de forma predeterminada es auto , es decir, solo cuando se encuentre la API de validación de beans JSR303 en classpath en tiempo de ejecución) o establecerlo en true .

BV no funciona en absoluto

Cuando realmente no funciona nada de BV, tampoco @Size(min=5) , @Pattern , etc., entonces debe verificar si no tiene lo siguiente en su forma:

<f:validateBean disabled="true" />

A continuación, debe eliminarlo (se activará de forma predeterminada) o establecer disabled="false" .

Asegúrate de usar la Mojarra más reciente

Cuando BV todavía no funciona, luego verifique si no está usando una versión anterior de Mojarra entre 2.2.3 y 2.2.6. Esas versiones tenían un error de delegado de carga de clases que causaba que la Validación de Beans en Tomcat y los clones fueran completamente invisibles. Esto se informa como la edición de Mojarra 3183 y se corrigió en Mojarra 2.2.7.


Si aún no puede validar incluso después de agregar los tarros indicados anteriormente, es posible que se haya perdido la adición de la etiqueta

<mvc:annotation-driven />

en el archivo de configuración de primavera.


Tuve un problema similar y pude superar el problema al incluir los tres jar inferiores en web-inf lib. Solo agregue el jarrón de validación de hibernación y los jar requeridos como se proporciona en el archivo zip:

  • hibernate-validator-4.3.0.Final.jar
  • jboss-logging-3.1.0.CR2.jar
  • validation-api-1.0.0.GA.jar