J'essaie d'utiliser struts validator pour vérifier la validité de mes formulaires.
Seulement j'ai un problème assez étrange voici le fichier de configuration du validator:
J'essaie de valider 3 champs. Sur les deux premiers pas de soucis. En revanche sur le 3eme...
Quand je fais un controle de type "required", validator empéche systèmatiquement la validation du formulaire, même lorsqu'il est bien remplit.
Quand je fais un controle de type "integer", validator valide le formulaire, même si j'entre des lettres dans les champs. Et j'ai également une erreur dans la console: java.lang.IllegalArgumentException: No name specified
20:14:55,734 WARN [PropertyMessageResources] Resource org/apache/struts/validator/LocalStrings_fr_FR.properties Not Found.
20:14:55,734 WARN [PropertyMessageResources] Resource org/apache/struts/validator/LocalStrings_fr.properties Not Found.
20:14:55,734 ERROR [ValidatorAction] Unhandled exception thrown during validation: No name specified
java.lang.IllegalArgumentException: No name specified
at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:635)
at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715)
at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:290)
at org.apache.commons.validator.util.ValidatorUtils.getValueAsString(ValidatorUtils.java:105)
at org.apache.struts.validator.FieldChecks.evaluateBean(FieldChecks.java:333)
at org.apache.struts.validator.FieldChecks.validateInteger(FieldChecks.java:436)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.commons.validator.ValidatorAction.executeValidationMethod(ValidatorAction.java:543)
at org.apache.commons.validator.Field.validateForRule(Field.java:766)
at org.apache.commons.validator.Field.validate(Field.java:846)
at org.apache.commons.validator.Form.validate(Form.java:290)
at org.apache.commons.validator.Validator.validate(Validator.java:354)
at org.apache.struts.validator.DynaValidatorForm.validate(DynaValidatorForm.java:117)
at org.dgme.rita.web.form.BindingTemplateForm.validate(BindingTemplateForm.java:46)
at org.apache.struts.chain.commands.servlet.ValidateActionForm.validate(ValidateActionForm.java:53)
at org.apache.struts.chain.commands.AbstractValidateActionForm.execute(AbstractValidateActionForm.java:100)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:459)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:432)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Unknown Source)
J'en déduit que validator ne parvient pas à trouver le troisiéme champ, mais pourquoi?
__________________________ Eoliennes et informatique sur freresguizmo
C'est bon j'ai trouvé: il fallait mettre <field property=... et non pas <field name=...
__________________________ Eoliennes et informatique sur freresguizmo
Les lignes importantes sont: <html:javascript formName="DocumentDescriptionForm" /> pour inclure les fonction javascrit du validator
<html:errors/> pour qu'il affiche les erreurs
et <html:form action="publishDocumentExecute" onsubmit="return validateDocumentDescriptionForm(this);"> pour lancer l'appel
Peux tu à ton tour mettre le code que tu m'as envoyé en MP pour que la discution soit compréhensible par tous?
__________________________ Eoliennes et informatique sur freresguizmo
Oui.VOILA BIGGUIZ a répondu au problème suivant
Je veux utiliser validation.xml
moi j'ai fait la régle required(obligatoire) sur deux champs (nom,type). mais rien ne se passe pire encore sans remplir les champs je passe à la page succé.
Pour cela, j'ai:
configuré le struts-config.xml(+plugin)
j'ai fait hérité le plugin animalform de ValidatorForm
/*
* Created on 29 mai 2007
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package fr.edition.eni.actionform;
import org.apache.struts.validator.ValidatorForm;
/**
* @author brahim
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class AnimalForm extends ValidatorForm{
private String nom;
private String type;
public String getType(){
return type;
}
public void setType(String type){
this.type=type;
}
public String getNom(){
return nom;
}
public void setNom(String nom){
this.nom=nom;
}
}
et j'ai mis validation.xml et validator-rules sous web-inf
et j'ai ajouter les conditions au fichier validation.xml
ca marche. c top.
juste que l'erreur s'affiche sur une autre fenetre, mois je veux que l'erreur s'affiche sur la meme page que le formulaire. pour cela j'ai mis le tag suivant mais ca marche pas:
Normalement l'erreur s'affiche d'abord dans une popup javascript puis, si l'erreur est trop complexe pour être traitée coté client, ou si le javascript et désactivé, l'erreur s'affiche dans ta page html.
Si tu ne veux pas de controles javascript, il faut configurer le plugin validator je ne sais plus comment.
__________________________ Eoliennes et informatique sur freresguizmo
Tu devrais aller voir sur le site de struts pour chercher les différentes configurations possibles (et aprés mettre la solution sur le forum).
__________________________ Eoliennes et informatique sur freresguizmo