[Struts 1.3.8] Utilisation du Plugin Validator ?!
Bonjour à tous,
Impossible de faire fonctionner ce Plugin, malgré de nombreux articles sur le Web :
:bug:
Voici l'ensemble des créations ou modifs que j'ai réalisées :
:arrow: struts-config.xml
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
| <struts-config>
<form-beans>
<form-bean name="formChoixMachine"
type="com.mycompany.pad.ChoixMachineForm">
<!-- Certains scripts ont le "type" mentionné ci-après, la différence ? -->
<!-- type="org.apache.struts.validator.DynaValidatorForm" -->
<form-property name="manufactNumber" type="java.lang.String"/>
</form-bean>
</form-beans>
[...]
<action-mappings>
[...]
<action
name="formChoixMachine"
path="/FormAffichMachine"
scope="session"
validate="true"
input="/choixMachine.do"
type="com.mycompany.pad.ChoixMachineAction"
>
<forward name="succes" path="/vues/ficheMachine.jsp"/>
<forward name="echec" path="/vues/choixMachine.jsp"/>
</action>
[...]
</action-mappings>
<message-resources parameter="com.mycompany.pad.padRessources"/>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"
/>
<set-property property="stopOnFirstError" value="false"/>
</plug-in>
</struts-config> |
:arrow: validator-rules.xml (!!! code récupéré sur le net !!!)
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 35 36 37 38 39 40 41 42 43
| <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE formation-validation PUBLIC
"-//Apache Software Foundation//DTD Commons
Validator Rules Configuration 1.3.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd">
<formation-validation>
<global>
<validator name="required"
classname="org.apache.struts.validator.FieldChecks"
method="validateRequired"
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"
msg="errors.required"
/>
<validator name="mask"
classname="org.apache.struts.validator.FieldChecks"
method="validateMask"
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"
depends=""
msg="errors.invalid"
/>
<validator name="minlength"
classname="org.apache.struts.util.StrutsValidator"
method="validateMinLength"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends="required"
msg="errors.minlength"
/>
</global>
</formation-validation> |
:arrow: validation.xml
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons
Validator Rules Configuration 1.3.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd">
<form-validation>
<formset>
<form name="formChoixMachine">
<field property="manufactNumber" depends="required,mask">
<msg name="mask" key="error.manufactNumber.incorrect" />
<arg position="0" key="error.manufactNumber.incorrect" />
<var>
<var-name>mask</var-name>
<var-value>^[0-9]{6}$</var-value>
</var>
</field>
</form>
</formset>
</form-validation> |
:arrow: padRessources.properties
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
| errors.header=<span style="padding-left: 10px">
errors.footer=</span>
errors.prefix=<span class="erreur">
errors.suffix=</span>
error.manufactNumber.incorrect=Numéro de fabrication <i>incorrect</i>.
error.manufactNumber.inexistant=Numéro de fabrication <i>inexistant</i>.
# Messages d'erreur de Struts Validator
errors.required={0} est obligatoire.
errors.minlength={0} ne peut pas être inférieur à {1} caractères.
errors.maxlength={0} ne peut pas être supérieur à {1} caractères.
errors.invalid={0} est invalide.
errors.byte={0} doit être de type "byte".
errors.short={0} doit être de type "short".
errors.integer={0} doit être de type "integer".
errors.long={0} doit être de type "long".
errors.float={0} doit être de type "float".
errors.double={0} doit être de type "double".
errors.date={0} n'est pas une date valide.
errors.range={0} n'est pas compris entre {1} et {2}.
errors.creditcard={0} n'est pas un numéro de carte de crédit valide.
errors.email={0} n'est pas une adresse de courrier électronique valide. |
:arrow: ChoixMachineForm
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
| package com.mycompany.pad;
import org.apache.struts.validator.ValidatorForm;
public class ChoixMachineForm extends ValidatorForm {
//Déclarations des éléments de la JSP
[...]
//Getters et Setters
[...]
// Validation
// Je peux bien la supprimer cette méthode désormais, non ?!
/*public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
// Gestion des erreurs
ActionErrors erreurs = new ActionErrors();
// Le chemin du 1er FDM doit être non vide
if (getUrlFdm() == null || getUrlFdm() == "") {
erreurs.add("urlFdmVide", new ActionMessage("error.urlFdm.vide"));
}
// Le chemin du 2ème FDM doit être non vide
if (getUrlFdm2() == null || getUrlFdm2() == "") {
erreurs.add("urlFdm2Vide", new ActionMessage("error.urlFdm2.vide"));
}
return erreurs;
}*/
} |
:arrow: Ma JSP
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
| <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/WEB-INF/tld/struts-html.tld" prefix="html" %>
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="stylesheet" href="style/default.css" type="text/css" />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Sélection du FDM à afficher</title>
<html:javascript formName="formChoixMachine" dynamicJavascript="false" staticJavascript="true" />
<!-- dynamicJavascript à "false" et ça NE plante PLUS -->
</head>
<body>
[...]
<div class="conteneur">
<h1>Interface de consultation de la BdD des paramètres machines</h1>
<hr />
<html:form action="/FormAffichMachine" focus="manufactNumber" onsubmit="return validateFormChoixMachine(this);">
<fieldset>
<legend>Choix du FDM à afficher</legend>
<p class="fieldset">
<label for="manufactNumber">
Numéro de fabrication : <html:text property="manufactNumber" size="10" maxlength="6" onfocus="select();" />
</label>
<html:submit styleClass="bouton" value="Soumettre" />
<html:errors property="manufactNumberIncorrect" />
<html:errors property="manufactNumberInexistant" />
</p>
</fieldset>
</html:form>
</div>
</body>
</html> |
Et voici la page d'erreurs avec dynamicJavascript="false" : La JSP s'affiche, je peux soumettre le formulaire et ... :
Citation:
Etat HTTP 500 -
--------------------------------------------------------------------------------
type Rapport d'exception
message
description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.
exception
javax.servlet.ServletException
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
cause mère
java.lang.ClassCastException
com.mycompany.pad.ChoixMachineAction.execute(ChoixMachineAction.java:29)
org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de Apache Tomcat/5.5.23.
Et voici la page d'erreurs avec dynamicJavascript="true" : La JSP ne s'affiche même PAS ... :
Citation:
Etat HTTP 500 -
--------------------------------------------------------------------------------
type Rapport d'exception
message
description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.
exception
javax.servlet.ServletException: Exception in JSP: /vues/choixMachine.jsp:10
7: <link rel="stylesheet" href="style/default.css" type="text/css" />
8: <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
9: <title>Sélection du FDM à afficher</title>
10: <html:javascript formName="formChoixMachine" dynamicJavascript="true" staticJavascript="true" />
11: </head>
12: <body>
13: <div class="menuGaucheBarre"></div>
Stacktrace:
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
cause mère
org.apache.jasper.JasperException: Exception in JSP: /vues/choixMachine.jsp:10
7: <link rel="stylesheet" href="style/default.css" type="text/css" />
8: <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
9: <title>Sélection du FDM à afficher</title>
10: <html:javascript formName="formChoixMachine" dynamicJavascript="true" staticJavascript="true" />
11: </head>
12: <body>
13: <div class="menuGaucheBarre"></div>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:467)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.struts.chain.commands.servlet.PerformForward.handleAsForward(PerformForward.java:113)
org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:96)
org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54)
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
cause mère
java.lang.NullPointerException: Depends string "required" was not found in validator-rules.xml.
org.apache.struts.taglib.html.JavascriptValidatorTag.createActionList(JavascriptValidatorTag.java:707)
org.apache.struts.taglib.html.JavascriptValidatorTag.createDynamicJavascript(JavascriptValidatorTag.java:441)
org.apache.struts.taglib.html.JavascriptValidatorTag.renderJavascript(JavascriptValidatorTag.java:396)
org.apache.struts.taglib.html.JavascriptValidatorTag.doStartTag(JavascriptValidatorTag.java:349)
org.apache.jsp.vues.choixMachine_jsp._jspx_meth_html_005fjavascript_005f0(choixMachine_jsp.java:134)
org.apache.jsp.vues.choixMachine_jsp._jspService(choixMachine_jsp.java:79)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.struts.chain.commands.servlet.PerformForward.handleAsForward(PerformForward.java:113)
org.apache.struts.chain.commands.servlet.PerformForward.perform(PerformForward.java:96)
org.apache.struts.chain.commands.AbstractPerformForward.execute(AbstractPerformForward.java:54)
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de Apache Tomcat/5.5.23.
Désolé pour ces "pavés", mais je vois vraiment pas d'où peut venir le problème ! :aie:
Merci d'avance,
Gôm.