Bonjour à tous,

Je suis actuellement en train de développer un projet utilisant les framework Struts 2 + Spring +Hibernate. Nous utilisons également Maven.

Je rencontre des problèmes pour l’utilisation de validators. Après avoir regardé la documentation d’Apache, réaliser différents tests (qui ne fonctionnent pas!!!) je me tourne vers vous afin de trouver une solution à mon problème.

L’architecture de l’application est la suivante :

Package : src/main/java
=>Package domain
-dao
-model
-service
-web
--form (la classeCreationConstatForm)
-…
=>…
Package : src/main/ressources
=>Package domain
- form
-- web
---form
-----CreationConstatForm-saveForm-validation.xml
=>struts.xml
=>validators.xml
=>…
Package : src/test/java
=>…
Package : src/test/ressources
=>…
Maven Dependencies
JRE System Librairie
Package : src
=>main
- webapp
--css
--img
--pages (creationConstat.jsp)
--WEB-INF
---applicationContext.xml
---web.xml
---tiles.xml
---…
--Index.jsp
=>test
=>target
=>pom.xml

Le contenu du fichier validators.xml est le suivant :
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
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
        "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
 
<validators>
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
Dans le struts.xml je déclare l’interceptor comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<interceptors>
    <!-- Authentication interceptor. -->
         <interceptor name="authenticationInterceptor" class="authenticationInterceptor" />
	 <interceptor name="rolesInterceptor" class="rolesInterceptor" />
	<interceptor name="validation" class="com.opensymphony.xwork2.validator.ValidationInterceptor"/>
    <!-- Interceptor stack. -->
	<interceptor-stack name="defaultSecurityStackWithAuthentication">
		<interceptor-ref name="defaultStack" />
		<interceptor-ref name="authenticationInterceptor" />
		<interceptor-ref name="rolesInterceptor" />
		<interceptor-ref name="validation"/>	
	</interceptor-stack>
</interceptors>
Dans la classe CreationConstatForm, il y a la méthode execute() pour la mise en page du formulaire et la méthode save() permettant d’enregistrer, qui est utilisé pour l’action saveForm.

souhaite appliquer le validator ( CreationConstatForm-saveForm-validation.xml) pour la méthode save(). Le code de CreationConstatForm-saveForm-validation.xml ci-dessous :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
       "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
	<field name="ccDonnees.ccEntite">
		<field-validator type="required">
			<message>Veuillez saisir l'entité.</message>
		</field-validator>
	</field>
</validators>
L’action est définie ainsi dans le struts.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
<action name="saveForm" class="creationConstatForm" method="save">
	<result name="input" type="tiles">creationConstat.constat</result>
	<result name="success">/pages/CollaborateurPage.jsp</result>
	<interceptor-ref name="validation"></interceptor-ref>
</action>
Pour ce qui est de l’affichage des erreurs j’ai essayé d’intégrer la balise (ci-dessous) dans le code de ma jsp. Mais sans résultat. Je ne suis pas sur que ce soit nécessaire car normalement le message doit s’afficher tout seul. Le thème utilisé avec struts est le theme=simple.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
<label for="entite" title="Entité du Collaborateur" class="oblig">Entité :</label>
<s:textfield name="ccDonnees.ccEntite" value="%{ccDonnees.ccEntite}" id="entite" tabindex="1" />
<s:fielderror>
	<s:param name="%{'ccDonnees.ccEntite'}"></s:param>
</s:fielderror>
Merci de votre aide.
Cordialement.