[Struts] Problème de validation

Gerwalden -  
 fateh -
Bonjour,

Je développe actuellement un projet intranet en Struts sous JBuilder et je rencontre le problème suivant : je n'arrive pas à valider de formulaire.

Explication : j'utilise pour ce faire le plugin Struts Validator, dans une architecture MVC.
Je dispose des fichiers suivants :

- une JSP 'formulaire_personne' pour la Vue.
- un Action, servlet qui sert de Contrôleur.
- un ActionForm, bean qui récupère les valeurs du formulaire.
- le fichier struts-config.xml
- les fichiers validation.xml et validator-rules.xml
- le fichier ressource 'personne_ressources.properties'

Le formulaire fonctionne, mais pas la validation : en effet je peux malgré la définition des fichiers xml rentrer des champs vides par exemple. Voici le code de mes fichiers :

=========================================

JSP 'formulaire_personne.jsp' :

<...>

<h2>Personne - formulaire</h2>
<hr>
<html:form action="/main" name="frmPersonne" type="personne.FormulaireBean">
<table>
<tr>
<td>Nom</td>
<td><html:text property="nom" size="20"/></td>
</tr>
<tr>
<td>Age</td>
<td><html:text property="age" size="3"/></td>
</tr>
<tr>
</table>
<table>
<tr>
<td><html:submit value="Envoyer"/></td>
<td><html:reset value="Rétablir"/></td>
<td><html:button property="btnEffacer" value="Effacer" onclick="effacer()"/></td>
</tr>
</table>
</html:form>

<...>

Bean : 'FormulaireBean.java'

package personne;

import org.apache.struts.action.*;
import javax.servlet.http.*;
import org.apache.struts.validator.*;

public class FormulaireBean extends ActionForm {

private String nom = null;
private String age = null;

public String getNom() {
return nom;
}

public void setNom(String nom) {
this.nom = nom;
}

public String getAge() {
return age;
}

public void setAge(String age) {
this.age = age;
}
}


Action : 'FormulaireAction.java'

<...>

package personne;

import [...]

public class FormulaireAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException {
// on a un formulaire valide, sinon on ne serait pas arrivé là
FormulaireBean formulaire = (FormulaireBean) form;
request.setAttribute("nom", formulaire.getNom());
request.setAttribute("age", formulaire.getAge());
return mapping.findForward("reponse");
}
}

le fichier struts-config.xml :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://struts.apache.org/dtds/struts-config_1_1.dtd">
<struts-config>
<form-beans>
<form-bean name="frmPersonne" type="personne.FormulaireBean" />
</form-beans>
<action-mappings>
<action input="/erreurs.do" name="frmPersonne" path="/main" scope="session" type="personne.FormulaireAction">
<forward name="reponse" path="/reponse.do" />
</action>
<action forward="/JSP/erreurs_personne.jsp" path="/erreurs" />
<action forward="/JSP/reponse_personne.jsp" path="/reponse" />
<action forward="/JSP/formulaire_personne.jsp" path="/formulaire" />
</action-mappings>
<message-resources parameter="ressources.personne_ressources" />
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
</plug-in>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>
</struts-config>

le fichier validation.xml :

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0
//EN" "http://commons.apache.org/dtds/validator_1_0.dtd">

<form-validation>
<formset language="">
<form name="frmPersonne">
<field property="nom" depends="required">
<arg0 key="personne.nom"/>
</field>
<field property="age" depends="required,mask">
<arg0 key="personne.age"/>
<var>
<var-name>mask</var-name>
<var-value>${entierpositif}</var-value>
</var>
</field>
</form>
</formset>
</form-validation>

le fichier personne_ressources.properties :

# Messages d'erreur de Struts Validator
# la clé est prédéfinie et ne doit pas être changée
# le msg d'erreur associé est libre
# le msg peut avoir jusqu'à 4 paramètres {0} à {3}

errors.required=<li>Le champ [{0}] doit être renseigné.</li>
errors.minlength=<li>Le champ [{0}] foit avoir au moins {1} caractère.</li>
errors.maxlength=<li>Le champ [{0}] ne peut avoir plus de {1} caractères.</li>
errors.invalid=<li>Le champ [{0}] est incorrect.</li>
errors.byte=<li>{0} doit être un octet.</li>
errors.short=<li>{0} doit être un entier court.</li>
errors.integer=<li>{0} doit être un entier.</li>
errors.long=<li>{0} doit être un entier long.</li>
errors.float=<li>{0} doit être un réel simple.</li>
errors.double=<li>{0} doit être un réel double.</li>
errors.date=<li>{0} n'est pas une date valide.</li>
errors.range=<li>{0} doit être dans l'intervalle {1} à {2}.</li>
errors.creditcard=<li>{0} n'est pas un numéro de carte valide.</li>
errors.email=<li>{0} n'est pas une adresse électronique valide.</li>

personne.nom=nom
personne.age=age

========================================

Je ne vois vraiment pas ce qui peut manquer à ces fichiers pour que la validation s'effectue, je n'ai même pas d'erreurs ...

J'ai découvert sur le Net qu'il fallait rajouter une ligne de javascript
dans la jsp avant le html:form, mais cela ne change rien ...

Si vous pouviez m'aider ... ^^'
Merci d'avance.

3 réponses

fateh
 
salut une autre foix,

la solution est ici : https://markmail.org/message/zec4msbvezsqzhwp

tu doit mettre org.apache.commons.validator.Validator entre ActionMessages et Request.

dans le fichier fournit par struts (validator-rules.xml) dans tous les bloques <validator name="quelqueChose"


Fateh
1
zineb
 
bonjour
pour FormBean il faut faire un extends ValidatorForm
je suis dans le meme probleme mais moi j'ai la boite de dialogue qui s'affiche sans le message
mon probleme se situe dans le .properties
je ne sais pas ou le faire
mais bon
essaie d'integrer cette ligne dans ton bean
met
<html:javascript formName="nom_de_la_form"/>
dans le header de ton jsp
et la ligne
<form name="frmPersonne" action="http://localhost:8080/application/main.do" method="post" class="f-wrap-1" onsubmit="return validateFrmPersonne(this);">
dans la balise forme on suposan ke ta form s'appel frmPersonne
je ss desolee j'ai pas lu ton code ;-)
0
fateh
 
Bonjour,

essaye de mettre dans le fichier struts-config.xml : validate = "true"

dans cette action

<action
input="/erreurs.do" name="frmPersonne"
path="/main"
scope="session"
----> validate = "true" <------
type="personne.FormulaireAction">
<forward name="reponse" path="/reponse.do" />
</action>

fateh
0