Bonjour !
J'ai une question concernant le validator hibernate et le converter de JSF. Je travaille sous JSF et Seam.
Je vous expose la situation simplement :
J'ai une classe de persistence EJB3 quit suit :
J'ai ensuite une page xhtml du type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 @javax.persistence.MappedSuperclass public abstract class VehiculeEntity implements java.io.Serializable { @org.hibernate.validator.Length(max=35) @javax.persistence.Column(name="immatriculation", nullable=true, unique=false, insertable=true, updatable=true) private java.lang.String immatriculation ; ... @javax.persistence.Column(name="puissance_fiscale", nullable=true, precision=11, scale=0, unique=false, insertable=true, updatable=true) private java.lang.Integer puissanceFiscale ; ... }
Mon messages_fr.properties :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <s:decorate id="immatriculation" template="../layout/edit.xhtml" styleClass="inline"> <ui:define name="input"> <h:inputText value="#{vehiculeCourant.immatriculation}" readonly="#{EcranVehicule.modeLecture}"/> </ui:define> </s:decorate> ... <s:decorate id="puissanceFiscale" template="../layout/edit.xhtml" styleClass="inline"> <ui:define name="input"> <h:inputText value="#{vehiculeCourant.puissanceFiscale}" readonly="#{EcranVehicule.modeLecture}" /> </ui:define> </s:decorate>
Donc quand je valide mon formulaire, la classe javax.faces.convert.IntegerConverter est appelée pour mon champs puissanceFiscale et la classe org.hibernate.validator.LengthValidator est appelée pour mon champs immatriculation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 validator.length = la longueur doit être comprise entre {min} et {max} ... javax.faces.converter.IntegerConverter.INTEGER = la valeur doit être un nombre
J'obtiens le message d'erreur 'la valeur doit etre un nombre' si j'ai tappé autre chose qu'un nombre pour le champs puissanceFiscale et le message 'la longueur doit être comprise entre X et Y' si j'ai tappé une valeur ayant une longueur supérieure à 35.
Bref, jusque là no soucis.
Maintenant : j'aimerai personnaliser ces 2 messages.
J'aimerai juste ajouter devant chaque message le libellé du champs concerné du type :
'Puissance Fiscale : la valeur doit être un nombre'
'Immatriculation : la longueur doit être comprise entre X et Y'
Je vois plusieurs façons de le faire :
1ère solution :
Modifier mon .properties pour y ajouter un paramètre dans les messages.
-> Je ne peux malheureusement pas, ces messages sont utilisés partout dans l'application et doivent rester tels quels (exception pour l'écran concerné ici)
2ème solution :
ajouter les attributs convertMessage="Puissance Fiscale : blabla" et validatorMessage="Immatriculation : la longueur blabla".
Ca fonctionne mais si jamais j'ai des champs avec plusieurs annotations de validations hibernate, je suis coincé.
Cette solution est assez limitée du coup.
3ème solution :
Créer un custom converter IntegerValueConverter par exemple et un custom validator VehiculeLengthValidator par exemple, et y faire appel sur les champs voulus.
-> Recoder les méthodes de validation alors qu'elles existent déjà ça le fait moyen. J'aimerai éviter cette solution si possible.
Donc voilà, que me reste-il ? Y a t-il un moyen de surcharger ces messages sans utiliser une des méthodes citées ci-dessus ?
Merci de m'éclairer si possible !
Partager