J'utilise des annotations Hibernate Validation dans mon bean géré JSF. Lorsque j'utilise @NotNull
, @NotBlank
ou @NotEmpty
ils ne semblent en aucun cas être déclenchés.
@NotBlank(message = "{name.required}")
public String name;
Vue:
<h:outputLabel value="Name:" />
<h:inputText id="name" value="#{person.name}" size="20" />
<h:message for="name" style="color:red" />
Comment cela est-il causé et comment puis-je le résoudre?
Étant donné que vous n'avez donné aucun commentaire sur mon commentaire avec la question de savoir quel conteneur vous utilisez, j'ai jeté un œil dans votre historique de questions pour savoir quels conteneurs vous utilisez tous. Pour l'instant, je n'ai trouvé que Tomcat . Donc, pour cette réponse, je suppose que vous utilisez effectivement Tomcat comme je l'avais initialement supposé lors de la publication du commentaire.
Tomcat n'est livré avec aucune implémentation/API de validation de bean JSR303. Vous devez télécharger et installer vous-même. Le fait que vous ayez ces annotations à compiler signifie que vous avez correctement supprimé le fichier hibernate-validator.jar
(Le nom peut différer selon la version) dans le dossier /WEB-INF/lib
De votre application Web. Le fait que ces annotations ne semblent à leur tour fonctionner en aucune façon peut simplement signifier que vous n'avez pas lu le readme.txt
Et/ou oublié d'ajouter les fichiers JAR du dossier /lib/required
Du validateur Hibernate fichier Zip/tgz de la bibliothèque: slf4j-api.jar
et validation-api.jar
. La dernière est obligatoire pour que les annotations fonctionnent réellement. Donc, pour que Hibernate Validator fonctionne dans Tomcat, vous avez besoin des fichiers JAR suivants dans /WEB-INF/lib
De la webapp:
validation-api.jar
(Contient l'API abstraite et le scanner d'annotations)hibernate-validator.jar
(Contient l'implémentation concrète)slf4j-api.jar
(Juste pour que son enregistreur fonctionne également)De cette façon @NotBlank
et @NotEmpty
doit fonctionner. Le @NotNull
mérite une attention particulière; les champs de saisie vides sont notamment reçus par défaut sous forme de chaînes vides du client (webbrowser) en raison de la nature des paramètres de requête HTTP. Les chaînes vides ne sont pas identiques à null
, donc @NotNull
par défaut ne se déclenchera jamais. JSF est cependant configurable pour les interpréter comme null
en ajoutant simplement le paramètre de contexte suivant à 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 cette façon, le @NotNull
doit également fonctionner.
Si cela encore ne fonctionne pas (c'est-à-dire qu'aucune des 3 annotations ne fonctionne, mais d'autres comme @Size(min=5)
pour une longueur minimale de 5 fonctionne très bien ), alors les chances sont grandes que vous ayez également le paramètre de contexte suivant dans web.xml
:
<context-param>
<param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
<param-value>false</param-value>
</context-param>
Vous devez ensuite le supprimer (par défaut, il est auto
, c'est-à-dire uniquement lorsque l'API JSR303 Bean Validation se trouve dans le chemin d'accès aux classes d'exécution) ou le définir sur true
.
Quand en fait rien de BV ne fonctionne, pas non plus @Size
, @Pattern
, etc., alors vous devriez vérifier si vous le faites pas les éléments suivants dans votre formulaire:
<f:validateBean disabled="true" />
Vous devez ensuite le supprimer (il sera juste par défaut activé) ou définir disabled="false"
.
Lorsque BV encore ne fonctionne pas, vérifiez si vous n'utilisez pas une ancienne version de Mojarra entre 2.2.3 et 2.2.6. Ces versions avaient un bogue de délégué de chargement de classe qui rendait complètement la validation de bean sur Tomcat et les clones complètement invisible. Ceci est signalé comme Mojarra issue 318 et corrigé dans Mojarra 2.2.7.
J'ai eu un problème similaire et j'ai pu surmonter le problème en incluant les trois pots ci-dessous dans web-inf
lib. Ajoutez simplement le fichier de validation hibernate et les fichiers requis comme indiqué dans le fichier Zip:
hibernate-validator-4.3.0.Final.jar
jboss-logging-3.1.0.CR2.jar
validation-api-1.0.0.GA.jar