Validation des haricots @NotNull, @NotBlank et @NotEmpty ne fonctionne pas dans JSF+Tomcat
j'utilise des annotations de Validation D'hibernation dans mon haricot géré par JSF. Quand j'utilise @NotNull
, @NotBlank
ou @NotEmpty
ils ne semblent pas être déclenchés en aucune façon.
@NotBlank(message = "{name.required}")
public String name;
:
<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?
3 réponses
Introduction
puisque vous n'avez pas donné de commentaires sur mon commentaire avec la question quel conteneur vous utilisez, j'ai regardé autour de votre question histoire pour savoir ce que les conteneurs que vous utilisez tous. Jusqu'à présent, je n'ai trouvé que Tomcat . Donc, je vais pour cette réponse supposer que vous utilisez en effet Tomcat comme je l'ai initialement deviné lors de la publication du commentaire.
assurez-vous d'installer tous les pots
Tomcat n'expédie pas D'API/implémentation de Validation Fève JSR303 dans la boîte. Vous devez télécharger et installer vous-même. Que vous ayez ces annotations à compiler signifie que vous avez correctement fait tomber le fichier hibernate-validator.jar
(le nom peut différer par version) dans le dossier /WEB-INF/lib
de votre webapp. Que ces annotations à leur tour ne semblent pas fonctionner d'une manière ou d'une autre peut seulement signifier que vous n'avez pas lu le readme.txt
et/ou oublié d'ajouter les pots de la /lib/required
dossier de l'Hibernate Validator bibliothèque zip ou tgz fichier: slf4j-api.jar
et validation-api.jar
. Le dernier est obligatoire afin d'obtenir les annotations de travailler. Donc, pour que Hibernate Validator fonctionne dans Tomcat, vous avez besoin des bocaux suivants dans /WEB-INF/lib
de webapp:
-
validation-api.jar
(contient L'API abstract et le scanner d'annotation) -
hibernate-validator.jar
(contient la mise en œuvre concrète) -
slf4j-api.jar
(juste pour faire fonctionner son logger)
de Cette façon @NotBlank
et @NotEmpty
doit travailler. Le @NotNull
mérite une attention particulière; les champs d'entrée 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 cordes vides ne sont pas les mêmes que null
, @NotNull
par défaut, jamais de coup de pied dans. 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 fonctionner aussi.
BV fonctionne, mais seulement des champs vides ne pas
Si il encore ne fonctionne pas (c'est à dire aucun des 3 les annotations fonctionnent, mais d'autres comme @Size(min=5)
pour une longueur minimale de 5 œuvres très bien), puis les chances sont grandes que vous avez le paramètre de contexte suivant dans web.xml
ainsi:
<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 auto
, c'est-à-dire seulement lorsque L'API de validation Fève JSR303 se trouve dans runtime classpath) ou le définir à true
.
BV ne travaille pas du tout
Quand en fait rien de BV ne fonctionne, aussi pas @Size
, @Pattern
, etc, alors vous devez vérifier si vous faites pas ont la suivante dans votre forme:
<f:validateBean disabled="true" />
vous devez alors le supprimer (il sera juste par défaut coup de pied dans) ou de définir disabled="false"
.
assurez-vous d'utiliser le Mojarra le plus récent
lorsque BV encore ne fonctionne pas, puis vérifiez si vous n'utilisez pas une ancienne version Mojarra entre 2.2.3 et 2.2.6. Ces versions ont un bug de délégué de téléchargement de classe qui rend la Validation des fèves sur Tomcat et les clones complètement invisible. Ceci est rapporté comme Mojarra numéro 3183 et fixé 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. Il suffit d'ajouter le bocal de validation hibernate et les bocaux requis tel que 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
S'il ne parvient toujours pas à valider même après avoir ajouté les bocaux indiqués ci-dessus, alors vous pourriez avoir manqué l'ajout de l'étiquette
<mvc:annotation-driven />
dans le fichier de configuration du ressort.