Validation d'un formulaire dynamique
Bonjour,
J'ai un problème dans la validation d'un formulaire, dans mon fichier struts-config.xml j'ai le formulaire suivant:
Code:
1 2 3 4 5 6 7
| <form-beans>
<!-- Si nous validons de forme dynamique le formulaire, alors nous navons pas besoin de crée les les clase qui dérive de ActionForm. -->
<form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="nombre" type="java.lang.String"></form-property>
<form-property name="password" type="java.lang.String"></form-property>
</form-bean>
</form-beans> |
et aussi la localisation des fichier de validation:
Code:
1 2 3 4
|
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in> |
voici le contenu du fichier validation.xml en relation avec ce formulaire:
Code:
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
| <form-validation>
<formset>
<form name="loginForm">
<field property="nombre" depends="required, minlength, maxlength">
<arg0 key="label.nombre" />
<arg1 name="minlength" key="${var:minlength}" resource="false"/>
<arg2 name="maxlength" key="${var:maxlength}" resource="false"/>
<var>
<var-name>minlength</var-name>
<var-value>3</var-value>
</var>
<var>
<var-name>maxlength</var-name>
<var-value>50</var-value>
</var>
</field>
<field property="password" depends="required, minlength,maxlength">
<arg0 key="label.password" />
<arg1 name="minlength" key="${var:minlength}" resource="false" />
<arg2 name="maxlength" key="${var:maxlength}" resource="false" />
<var>
<var-name>minlength</var-name>
<var-value>3</var-value>
</var>
<var>
<var-name>maxlength</var-name>
<var-value>30</var-value>
</var>
</field>
</form>
</formset>
</form-validation> |
dans ma classe qui a pour but de faire des opérations sur ce formulaire j'ai:
Code:
1 2 3
| DynaValidatorForm myform = (DynaValidatorForm) form;
System.out.println("Nom: " + myform.get("nombre"));
System.out.println("Prénom :" + myform.get("password")); |
je pensais avoir tout bien défini, mais j'ai un jolie message d'erreur:
Code:
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
| SEVERE: reflection: org.apache.struts.validator.FieldChecks.validateRequired(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)
java.lang.NoSuchMethodException: org.apache.struts.validator.FieldChecks.validateRequired(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)
at java.lang.Class.getMethod(Unknown Source)
at org.apache.commons.validator.Validator.validateFieldForRule(Validator.java:401)
at org.apache.commons.validator.Validator.validateField(Validator.java:544)
at org.apache.commons.validator.Validator.validate(Validator.java:582)
at org.apache.struts.validator.DynaValidatorForm.validate(DynaValidatorForm.java:151)
at org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:942)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:255)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source) |
Je vous remercie d'avance pour une possible piste.
Validation d'un formulaire dynamique
J'ai trouvé la solution dans un document sur google
Citation:
files into WEB-INF
or the module folder under WEB-INF
GOTCHA: be very sure you are using the same versions of your struts.jar & the validator xml files
if you do not you will get strange errors like this:
java.lang.NoSuchMethodException: org.apache.struts.validator.FieldChecks.validateRequired(java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest)
et oui il faut la bonne version de struts.jar. Mois j'ai tenté un au hasard différent de celui que j'avais et boom ça marche, ensuite il faut ajouter plusieurs bibliothèque commons-validator.jar et autre...
Voilà c'est résolu :D