Bonjour à tous,
J'aurais aimé savoir s'il est possible de créer ses propre validatore et de les inclure dans le fichier validator-rules.xml?
Si cela est possible quelle classe dois-je étendre.
merci d'avance
Bonjour à tous,
J'aurais aimé savoir s'il est possible de créer ses propre validatore et de les inclure dans le fichier validator-rules.xml?
Si cela est possible quelle classe dois-je étendre.
merci d'avance
tu peux créer tes propres validator et les inclure dans un autre fichier validator
exemple :
pour la classe javadans ton fichier myvalidator.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 public final class CodePostalCheck { /** * Utility classes should not have a public or default constructor. */ private CodePostalCheck() { } /** * Méthode de validation d'un code postal * @param p_bean Form Bean du formulaire * @param p_validatorAction Action de validation * @param p_field Champ du formulaire * @param p_actionMessages Erreurs Struts * @param p_request Request HTTP * @return true si le code postal est valide. */ public static boolean validateCodePostal( Object p_bean, ValidatorAction p_validatorAction, Field p_field, ActionMessages p_actionMessages, HttpServletRequest p_request) { String value = ValidatorUtils.getValueAsString(p_bean, p_field.getProperty()); if (!GenericValidator.isBlankOrNull(value)) { if (!CodePostalValidation.isValide(new Integer(value))) { p_actionMessages.add( p_field.getKey(), Resources.getActionMessage( p_request, p_validatorAction, p_field)); return false; } } return true; } }
et au niveau du strut-config :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN" "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"> <form-validation> <global> <validator name="cdPostal" classname="mon.package.CodePostalCheck" method="validateCodePostal" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest" depends="integer" msg="errors.codePostal"/> </global> </form-validation>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/myvalidator.xml,/WEB-INF/validation.xml" /> </plug-in>
Tu peux aussi ajouter le javascript qui servira à valider le formulaire côté client. voici un exemple qui valide que deux dates du formulaire sont consécutives:
Classe Java - elle servira notamment pour la validation côté serveur
Fichier validation-rules pour la validation côté client
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 /** * Custum struts validator * * @author bsempere */ public class ValidConsecutiveDate { /** * Teste que deux dates saisies sont consécutives * * @param bean * @param va * @param field * @param messages * @param request * * @return boolean */ public static boolean validateTwoConsecutiveDate(Object bean, ValidatorAction va, Field field, ActionMessages messages, HttpServletRequest request) { String value = ValidatorUtils.getValueAsString(bean, field.getProperty()); String sProperty2 = field.getVarValue("endDate"); String value2 = ValidatorUtils.getValueAsString(bean, sProperty2); //Si une des deux date est null => la validation est ok if(!GenericValidator.isBlankOrNull(value) && !GenericValidator.isBlankOrNull(value2)) { try { //Si les deux dates sont identiques => la validation est ok if(!value.equals(value2)) { //Il faut tester que la date de depart est antérieure a la date de fin Calendar dateDeb = GesUtClioSimpleDateFormat.parseCalendar(value); Calendar dateFin = GesUtClioSimpleDateFormat.parseCalendar(value2); //Probleme de validation if(!dateDeb.before(dateFin)) { messages.add(field.getKey(), Resources.getActionMessage(request, va, field)); return false; } } } catch(Exception e) { messages.add(field.getKey(), Resources.getActionMessage(request, va, field)); return false; } } return true; } }
Exemple de validation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 <!-- Custom validation for date --> <validator name="validConsecutiveDate" msg="errors.datedeb.notbefore.datefin" classname="sec.gespers.validator.validconsecutivedate.ValidConsecutiveDate" method="validateTwoConsecutiveDate" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, org.apache.commons.validator.Validator, javax.servlet.http.HttpServletRequest"> <javascript><![CDATA[ function validateTwoConsecutiveDate(form) { var bValid = true; var focusField = null; var i = 0; var formName = form.getAttributeNode("name"); var fields = new Array(); oTwoFields = eval('new ' + formName.value + '_validConsecutiveDate ()'); for (x in oTwoFields) { var field = form[oTwoFields[x][0]]; var secondField = form[oTwoFields[x][2]("endDate")]; if (field.type == 'hidden' || field.type == 'text' || field.type == 'textarea') { var value; var secondValue; // get field's value value = field.value; secondValue = secondField.value; //Tranformation en date de debut var j=(value.substring(0,2)); var m=(value.substring(3,5)); var a=(value.substring(6)); var ddebut=new Date(a,m-1,j); var debut=ddebut.getTime(); //Tranformation en date de fin var j=(secondValue.substring(0,2)); var m=(secondValue.substring(3,5)); var a=(secondValue.substring(6)); var dfin=new Date(a,m-1,j); var fin=dfin.getTime(); if ((ddebut.getTime()) > (dfin.getTime())){ if (i == 0) { focusField = field; } fields[i++] = oTwoFields[x][1]; bValid = false; } } } if (fields.length > 0) { focusField.focus(); alert(fields.join('\n')); } return bValid; }]]></javascript> </validator>
bon courage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <field property="dateDebNewCycle" depends="required,date,mask,validConsecutiveDate" page="11"> <arg key="prompt.cours.dateDebNewCycle"/> <var> <var-name>datePattern</var-name> <var-value>${clioDatePattern}</var-value> </var> <var> <var-name>mask</var-name> <var-value>${clioDatePatternForSave}</var-value> </var> <var> <var-name>endDate</var-name> <var-value>dateFinNewCycle</var-value> </var> </field>
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager