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?

26
demandé sur BalusC 2011-09-25 15:34:23

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.

63
répondu BalusC 2017-05-23 10:31:22

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
3
répondu abhi 2012-10-03 11:25:16

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.

-2
répondu sarayu 2016-07-23 17:09:48