Bonjour à tous,

Impossible de faire fonctionner ce Plugin, malgré de nombreux articles sur le Web :





Voici l'ensemble des créations ou modifs que j'ai réalisées :

struts-config.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
<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>

validator-rules.xml (!!! code récupéré sur le net !!!)
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
<?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>

validation.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
<?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>

padRessources.properties
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
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.

ChoixMachineForm
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
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;
	}*/
}

Ma JSP
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
<%@ 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 &agrave; 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&egrave;tres machines</h1>
			<hr />
			<html:form action="/FormAffichMachine" focus="manufactNumber" onsubmit="return validateFormChoixMachine(this);">
				<fieldset>
					<legend>Choix du FDM &agrave; afficher</legend>
					<p class="fieldset">
						<label for="manufactNumber">
							Num&eacute;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 ... :
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 ... :
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 &agrave; 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 &agrave; 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 !


Merci d'avance,
Gôm.