en fait, je ne parviens pas à retrouver le validator-rules livré avec struts j'ai decompresser le .jar commons-validator mais il ne s'y trouve pas
Version imprimable
en fait, je ne parviens pas à retrouver le validator-rules livré avec struts j'ai decompresser le .jar commons-validator mais il ne s'y trouve pas
Tout dépend quelle version de Struts tu utilises. Peux-tu le préciser ?
Dans les versions 1.3, il est dans le jar struts-core et comme je l'ai expliqué précédemment, il n'est pas utile de le copier dans le projet.
Dans les versions 1.2, tu peux le trouver dans le répertoire lib de Struts que tu as téléchargé.
c'est la version 1.1 que j'utilise
je vais reprendre le validator-urles.xml qui a été utilisé pour les autres projets de ma boite, ils sont sous la même version.
Je n'ai pas de version 1.1 mais je suppose que le fichier validator-rules.xml se trouve dans le répertoire lib de Struts téléchargé.
ok j'ai vérifié au près de personne ayant manipulé ce fichier et c'est le bon, je te remercie !! et maintenant ça fonctionne bien !!! j'ai plus qu'a généralisé mon traitement
merci de ton aide
La validation de la date se fait bien en fonction de la locale ?
Si c'est bien le cas, c'est cool parce que j'avais peur que ça ne fonctionne pas en Struts 1.1.
avec le language="fr" ça fonctionne, pour les autres langages j'ai pas encore tester il faut que je bascule dans un autre langage, je te redirai si cela fonctionne
Après de nouveaux essais ce matin , je confirme qu'avec struts 1.1, on peut effectuer une validation différente par langue : en effet il suffit d'avoir un fichier validation.xml semblable à celui-ci :
Ensuite il faut définir chaque message afficher par le javascript dans les fichiers properties, dans mon cas la clé est errors.date.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 <formset language="fr"> <form name="nomDuFormBean"> <field property="maDate" depends="required,date"> <arg position="0" key="key.maDate"/> <var> <var-name>datePatternStrict</var-name> <var-value>dd/MM/yyyy</var-value> </var> </field> </form> </formset> <formset language="en"> <form name="nomDuFormBean"> <field property="maDate" depends="required,date"> <arg position="0" key="key.maDate"/> <var> <var-name>datePatternStrict</var-name> <var-value>MM-dd-yyyy</var-value> </var> </field> </form> </formset>
Ce comportement est donc adapté à mon programme et j'en suis ravi.
Je me pose d'autres petites questions :
- A quoi sert la ligne :
- J'aimerai pouvoir mettre plusieurs possibilié pour ma date du genre : dd/MM/aaaa , ddMMaaaa. Pour cela j'ai mis plusieurs balise <var> et cela fonctionne mais n'est ce pas dangereux à utiliser?Code:<arg position="0" key="key.maDate"/>
- J'aimerai également lors de mon entrée sur la page effectuer un préremplisage du textinput contenant la date : par exemple dd/MM/aaaa pour guider l'utilisateur, comment puis-je m'y prendre?
- Dernière question, vu que j'autorise plusieurs forme de date à la saisie je dois être capable de les transformer au format français de ma base de données. Comment puis-je m'y prendre pour convertir mon string obtenu à la saisie et le transcrire en date au format de ma base de données.
Le mieux serait que ce soit le plus automatique possible.
Merci par avance pour l'aide.
:arrow: La balise arg que je t'ai donné fonctionne avec Struts 1.3.
Avec Struts 1.1, utilise plutôt :
En fait, dans l'attribut key, tu dois spécifier la clé correspondant au libellé du champ date.Code:<arg0 key="key.date"/>
Par exemple, dans le cas d'une date de naissance, tu pourrais coder ceci dans le fichier properties :
et ceci dans la balise arg0 :Code:
1
2 dateNaissance=Date de naissance errors.date={0} invalide.
Et donc, lors de la validation, si le format de date saisi n'est pas le bon, le message suivant apparaîtra :Code:<arg0 key="dateNaissance"/>
:arrow: Sinon, je n'ai jamais testé la définition de plusieurs formats pour une même date mais, si en mettant les formats dd/MM/aaaa et ddMMaaaa, il vérifie bien que la date est bien saisi sous l'un ou l'autre format, c'est que c'est bon.Citation:
Date de naissance invalide
:arrow: Sinon, plutôt que de préremplir ton champ, tu pourrais peut-être plutôt afficher un message à côté du champ texte via le tag bean:message.
Dans chaque fichier d'internationalisation, tu définis une clé et le libellé associé pour indiquer le bon format de saisi pour la date style :
et dans la jsp, à côté du champ texte :Citation:
dateNaissance.formats=(dd/MM/aaaa ou ddMMaaaa)
:arrow: Et enfin, pour transformer la date String en date Java, il faut utiliser la classe SimpleDateFormat comme indiqué dans la FAQ.Code:<bean:message key="dateNaissance.formats"/>
Et pour récupérer le bon format en fonction de la locale, on peut également utiliser les messages définis dans les fichiers properties et les récupérer dans l'Action.
Par exemple, dans le fichier properties français :
dans l'Action, on récupère les formats :Citation:
dateNaissance.format1=dd/MM/aaaa
dateNaissance.forma21=ddMMaaaa
et ensuite, on transforme la date en fonction du format récupéré :Code:
1
2
3 MessageResources messageResources = this.getResources(request); String formatDateNaissance1= messageResources.getMessage(request.getLocale(),"dateNaissance.format1"); String formatDateNaissance2= messageResources.getMessage(request.getLocale(),"dateNaissance.format2");
Tu dois pouvoir gérer le cas où le parse ne fonctionne pas avec le premier format et dans ce cas, faire le parse avec le deuxième format.Code:
1
2 SimpleDateFormat sdf = new SimpleDateFormat(formatDateNaissance1); Date javaDateNaissance=sdf.parse(dateNaissance);
A tester.;)
ok mrci pour ces renseignements je vais aprofondir.
En ce qui concerne les deux patterns pour la date ça ne fonctionne pas, il prend en compte seulement le deuxième. Cela est du au patternStrict qui oblige un seul type de saisie. Par contre si j'enlève le strict il m'accepte tout, c'est pas normal?
Sinon sais tu si on peut empecher la saisie de caractère dans le champ autrement qu'en javascript?
En fait je crois que datePattern n'existe pas dans struts 1.1, il y a seulement datePatternStrict , car quand j'essaye avec datePatternStrict, j'ai une erreur javascript sur la fonction javascript de validation-rules.xml
Si la règle fournie par le Validator pour les champs date ne correspond pas à ton attente, tu peux très bien définir ta propre règle de validation mais là, c'est à toi d'écrire le code qui va bien.
Ensuite, il faut créer ton propre fichier validator-rules.xml pour déclarer cette nouvelle règle et référencer cette nouvelle règle pour ton champ date dans le fichier validation.xml.
Pour info, tu peux choisir de faire une validation côté client en écrivant la fonction Javascript correspondante et/ou une validation côté serveur en écrivant la classe Java correspondante.
Pour écrire ta propre règle, tu peux très bien t'inspirer du code Java ou Javascript fourni pour la règle de validation des dates par le Validator.
oui je vois ce que tu veux dire, mais je ne vais pas faire. Je cherche une méthode très générale et non spécifique