2010-01-15 10 views
3

Comment pouvons-nous imposons la validation sur le terrain croix avec mise en veille prolongée validateur 3.1.0.GAvalidation sur le terrain avec la Croix-Hibernate Validator (3.1.0.GA)

Créer un utilisateur de table (id, start_date, date_fin, ...) par exemple Comment appliquer cette règle pour que les messages de validation puissent être affichés dans l'interface utilisateur lors des opérations de sauvegarde/mise à jour. L'interface utilisateur est construite en utilisant JSF, Richfaces

Répondre

0

Essayez ceci:

public class User { 

    private Date startDate = null; 
    private Date endDate = null; 

    @SuppressWarnings("unused") 
    @AssertTrue(message="college graduation finishing date for a student should be greater than the graduation start date") 
    private boolean dateValidation() { 
    return this.startDate < this.endDate; 
    } 
} 
+1

L'interface utilisateur est construite à l'aide de Seam/richfaces et la validation de formulaire est en fait liée à la validation au niveau du champ. Par conséquent, je m'attendrais à ce que l'appel de la méthode dateValidation() soit appelé par une partie de code dans la classe @Entity et souhaite que le message soit associé à la variable membre endDate, donc chaque fois que endDate est inférieur à startDate, le message devrait s'affiche comme un message de validation dans le champ endDate sur un formulaire. Dans l'extrait ci-dessus l'association de niveau de champ est manquante, je ne sais pas comment faire cela – Joe

+2

La validation ci-dessus est déclenchée, mais actuellement il provoque le crash de l'interface utilisateur. Il n'est pas clair sur la façon d'associer cela avec la variable de formulaire appropriée dans le code afin que Seam peut afficher ce message. – Joe

0

Voir ma question en double (et réponses) à Cross field validation with Hibernate Validator (JSR 303)

En bref, créer un niveau classe personnalisée validateur qui associe le niveau de la classe ConstraintViolation aux champs spécifiques en cours de validation.

+0

Je viens de réaliser que j'ai manqué 3.1.0GA dans le titre. Il est possible que ma solution ne fonctionne pas sous 3.1.0 car il y a eu quelques changements dans cette zone pour 4.0. Si j'y arrive (avant quelqu'un d'autre), je vérifierai si c'est le cas et enlèverai ma réponse si nécessaire. – bradhouse

0

pour cette approche

@SuppressWarnings("unused") 

@AssertTrue(message="college graduation finishing date for a student should be greater than the graduation start date") private boolean dateValidation() { return this.startDate < this.endDate; }

être valide, il aurait besoin de se conformer à la spécification de haricot standard, ce qui signifie soit un get/set/ou "est" préfixe. isDateValid() fonctionnerait-

+1

Je ne suis pas sûr si confirmer à la convention de haricot est le problème ici. Les validations étaient en cours mais le framework Jboss Seam n'était pas capable d'intercepter les validations de niveau classe et de l'associer à un paramètre de bean dans l'interface utilisateur. Ce problème persiste toujours. – Joe

+0

La solution consiste à ajouter manuellement les validations de niveau classe aux méthodes EntityHome.update/persist – Joe