Validation XML des champs d'un formulaire
Bonjour à tous,
J'essaie de valider le champ Nom d'un petit formulaire mais au bout de plusieurs tentatives en changeant toute sorte de chose, je n'y arrive toujours pas.
J'ai créé un fichier Accueil-validation.xml pour référencer la classe action Accueil.
Les champs ne sont pas directement dans la classe Accueil mais dans la classe ClientFormulaire.
Les données (nom, prénom...) sont bien entrées dans la base de données et sont affichées sur la page Web mais quand j'omets le nom, l'application ne signale pas le champ manquant.
Si vous avez une idée d'où vient le problème, je peux fournir d'autres fichiers s'il le faut.
Je travaille sur Tomcat 7.0 avec Struts2, Hibernate, HSQLDB et Spring.
Merci d'avance.
Voici une capture du projet et l'erreur :
http://www.heberger-image.fr/data/im...Validation.png
Les fichiers :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
<!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="clientFormulaire.nom">
<field-validator type="requiredstring">
<message>2 User Name is required.</message>
</field-validator>
</field>
</validators> |
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title><s:text name="titre.page.accueil" /></title>
</head>
<body>
<p>
Bienvenue sur mon site
<s:text name="titre.struts" />
</p>
<!-- Formulaire -->
<s:form action="Accueil" method="post">
<p>
<s:textfield name="clientFormulaire.nom"
key="creation.element.libelle.nom" readonly="false" size="20"
maxlength="20" />
</p>
<p>
<s:textfield name="clientFormulaire.prenom"
key="creation.element.libelle.prenom" readonly="false" size="20"
maxlength="20" />
</p>
<p>
<s:textfield name="clientFormulaire.adresse"
key="creation.element.libelle.adresse" readonly="false" size="50"
maxlength="50" />
</p>
<p>
<s:textfield name="clientFormulaire.age"
key="creation.element.libelle.age" readonly="false" size="5"
maxlength="5" />
</p>
<s:submit key="libelle.bouton.enregistrer" />
</s:form>
<h2>All Customers</h2>
<s:if test="clientFormulaire.clientsList.size > 0">
<h3>
taille : <s:property value="clientFormulaire.clientsList.size" />
</h3>
<table border="1px" cellpadding="8px">
<tr>
<th>Customer Id</th>
<th>Name</th>
<th>Prenom</th>
<th>Address</th>
<th>age</th>
</tr>
<s:iterator value="clientFormulaire.clientsList" status="userStatus">
<tr>
<td><s:property value="id" /></td>
<td><s:property value="nom" /></td>
<td><s:property value="prenom" /></td>
<td><s:property value="adresse" /></td>
<td><s:property value="age" /></td>
</tr>
</s:iterator>
</table>
</s:if>
<br />
<br />
</body>
</html> |
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
package main.fr.logica.projetStruts.action;
import java.util.ArrayList;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import main.fr.logica.projetStruts.bean.Client;
import main.fr.logica.projetStruts.bo.ClientBo;
import main.fr.logica.projetStruts.bo.ClientBoImpl;
public class Accueil extends ActionSupport {
private static final long serialVersionUID = -246501891704292910L;
private ClientFormulaire clientFormulaire;//= new Client();
private ClientBo clientBo;
public ClientBo getClientBo() {
return clientBo;
}
public void setClientBo(ClientBo clientBo) {
this.clientBo = clientBo;
}
public final String execute() {
System.out.println("Action executee: " + this.getClass().getName());
System.out.println("Donnees saisies: "
+ "\n Nom: " + this.clientFormulaire.getNom()
+ "\n Prenom: " + this.clientFormulaire.getPrenom()
+ "\n Adresse: " + this.clientFormulaire.getAdresse()
+ "\n Age: " + this.clientFormulaire.getAge()
);
//Enregistrer les donnees du formulaire en bd
try {
this.addClient();
} catch (Exception e) {
e.printStackTrace();
}
return "success"; //SUCCESS;
}
//save client and display all customers from database on screen
public String addClient(){
//Objet aa inseerer en bd
//mapping Client -> ClientBean a la main
Client cb = mappingDvoClientBean(clientFormulaire);
//save it
this.clientBo.addClient(cb);
//reload the customer list
//le mapping liste Client <- liste ClientBean a la main
mappingListClientBeanDvo(this.clientBo.listClients());
return "success";
}
public ClientFormulaire getClientFormulaire() {
return clientFormulaire;
}
public void setClientFormulaire(ClientFormulaire clientFormulaire) {
this.clientFormulaire = clientFormulaire;
}
private Client mappingDvoClientBean(ClientFormulaire client){ //ClientFormulaire to Client
Client clientBean = new Client();
clientBean.setNom(client.getNom());
clientBean.setPrenom(client.getPrenom());
clientBean.setAdresse(client.getAdresse());
clientBean.setAge(client.getAge());
return clientBean;
}
private void mappingListClientBeanDvo(List<Client> listClientBean){
for (Client cb : listClientBean) {
ClientFormulaire client = new ClientFormulaire();
client.setNom(cb.getNom());
client.setPrenom(cb.getPrenom());
client.setAdresse(cb.getAdresse());
client.setAge(cb.getAge());
this.clientFormulaire.getClientsList().add(client);
}
}
} |
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 44 45 46 47 48 49 50 51 52 53
|
package main.fr.logica.projetStruts.action;
import java.util.ArrayList;
import java.util.List;
public class ClientFormulaire {
private Integer id;
private String nom;
private String prenom;
private String adresse;
private Integer age;
private List<ClientFormulaire> clientsList = new ArrayList<ClientFormulaire>();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public String getAdresse() {
return adresse;
}
public void setAdresse(String adresse) {
this.adresse = adresse;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public List<ClientFormulaire> getClientsList() {
return clientsList;
}
public void setClientsList(List<ClientFormulaire> liste){
this.clientsList = liste;
}
public void addClientFormulaire(ClientFormulaire clientFormulaire){
this.clientsList.add(clientFormulaire);
}
} |
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
avr. 24, 2013 11:19:00 AM com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger error
SEVERE: Developer Notification (set struts.devMode to false to disable this message):
Unexpected Exception caught setting 'libelle.bouton.enregistrer' on 'class main.fr.logica.projetStruts.action.Accueil: Error setting expression 'libelle.bouton.enregistrer' with value '[Ljava.lang.String;@16a74ae'
avr. 24, 2013 11:19:21 AM com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger error
SEVERE: Caught exception while loading file main/fr/logica/projetStruts/action/Accueil-validation.xml
Connection timed out: connect - [unknown location]
at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:119)
at com.opensymphony.xwork2.validator.DefaultValidatorFileParser.parseActionValidatorConfigs(DefaultValidatorFileParser.java:81)
at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.loadFile(AnnotationActionValidatorManager.java:394)
at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.buildClassValidatorConfigs(AnnotationActionValidatorManager.java:279)
at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.buildValidatorConfigs(AnnotationActionValidatorManager.java:371)
at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.getValidators(AnnotationActionValidatorManager.java:102)
at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:141)
at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:133)
at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:128)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doBeforeInvocation(ValidationInterceptor.java:222)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:249)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:546)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.<init>(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.http.HttpClient.New(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at com.sun.org.apache.xerces.internal |