Bean Validation @NotNull, @NotBlank et @NotEmpty ne fonctionne pas dans JSF+Tomcat
Je suis de l'utilisation d'Hibernate Validation des annotations dans mon JSF managed bean. Lorsque j'utilise @NotNull
, @NotBlank
ou @NotEmpty
ils ne semblent pas être déclenchée en aucune façon.
@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 est-il la cause et comment puis-je le résoudre?
- Ce récipient que vous utilisez?
Vous devez vous connecter pour publier un commentaire.
Introduction
Puisque vous n'avez pas à donner de la rétroaction sur mon commentaire à la question de ce que les conteneurs que vous utilisez, j'ai jeté un coup d'oeil autour de votre question, histoire de savoir ce que les conteneurs que vous êtes tous à l'aide. Autant j'ai trouvé que Tomcat. Je vais donc pour cette réponse supposons que vous êtes en fait en utilisant Tomcat comme au départ, j'ai deviné tout de poster le commentaire.
Assurez-vous d'installer tous les Pots
Tomcat n'est pas livré avec tout JSR303 Bean API de Validation/mise en œuvre de la zone. Vous devez télécharger et installer vous-même. Que vous avez obtenu ces annotations pour compiler signifie que vous avez correctement abandonné le
hibernate-validator.jar
fichier (nom peut différer selon la version) dans/WEB-INF/lib
dossier de votre webapp. Que ces annotations à son tour ne semble pas fonctionner en aucune façon ne peut signifier que vous n'avez pas lu lereadme.txt
et/ou oublié d'ajouter les Pots de la/lib/required
dossier de la Hibernate Validator bibliothèque zip ou tgz fichier:slf4j-api.jar
etvalidation-api.jar
. Le dernier est obligatoire afin d'obtenir les annotations de travailler. Donc, pour obtenir Hibernate Validator pour travailler dans Tomcat, vous avez besoin de Pots en webapp est/WEB-INF/lib
:validation-api.jar
(contient le résumé de l'API et de l'annotation scanner)hibernate-validator.jar
(contient de la mise en œuvre concrète)slf4j-api.jar
(juste pour obtenir son enregistreur pour fonctionner).De cette façon
@NotBlank
et@NotEmpty
doit travailler. Le@NotNull
mérite une attention particulière; vide les champs de saisie sont à savoir par défaut reçus comme des chaînes vides à partir du client (webbrowser) en raison de la nature des paramètres de la requête HTTP. Les chaînes vides sont pas les mêmes quenull
, de sorte que le@NotNull
par défaut, jamais de coup de pied dans. JSF est cependant configureable de les interpréter commenull
en ajoutant simplement le contexte suivant paramètreweb.xml
:De cette façon, le
@NotNull
doivent fonctionner aussi bien.BV fonctionne, mais seulement des champs vides ne
Si il encore ne fonctionne pas (c'est à dire aucun des 3 annotations de travail, mais d'autres, comme
@Dimensions(min=5)
pour une durée minimale de 5 fonctionne très bien), alors les chances sont grandes que vous avez le contexte suivant paramètre dansweb.xml
ainsi:Ensuite, vous devez l'enlever (la valeur par défaut est
auto
, c'est à dire que lorsque JSR303 Bean Validation API est trouvé lors de l'exécution classpath) ou de la mettre à l'true
.BV ne fonctionne pas à tous les
Alors qu'en réalité, rien de BV œuvres, aussi pas
@Size
,@Pattern
, etc, alors vous devez vérifier si vous ne pas ont de la suite dans votre formulaire:Ensuite, vous devez l'enlever (il sera un peu par défaut coup de pied) ou pour définir
disabled="false"
.Assurez-vous que vous utilisez le plus récent Mojarra
Quand BV encore ne fonctionne pas, vérifiez si vous n'êtes pas à l'aide d'un vieux Mojarra entre la version 2.2.3 et 2.2.6. Ces versions avaient un classloading délégué bug causant Bean Validation sur Tomcat et des clones d'être complètement invisible. Ceci est rapporté que Mojarra question 3183 et fixe dans Mojarra 2.2.7.
@NotEmpty
est invoquée et fonctionne comme prévu, mais@NotBlank
est ignoré. Si annoté avec@NotBlank
il ne génère aucune erreur, même pour les nuls et des chaînes vides. Savez-vous ce qui peut provoquer le problème?J'ai eu un problème similaire et j'ai été en mesure de surmonter le problème en incluant le dessous de trois pots en
web-inf
lib. Il suffit d'ajouter les hibernate validator pot et les bocaux fourni 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
Si elle ne parvient toujours pas à valider, même après l'ajout de l'indiqués ci-dessus des pots, alors vous avez raté l'ajout de balise
dans le fichier de configuration spring.