Bonjour,

Je bloque sur le problème suivant :

J'ai un formulaire avec des listes de selection dont le contenu est récupéré dans une BD par une première action "actionModifUtilisateur", une deuxième, "actionValideModifUtilisateur" étant chargé de récupérer les changement et mettre à jour la BD :

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
 
<form-bean name="formModifUtilisateur" type="FormModifUtilisateur"/>
 
<action name="formModifUtilisateur" 
        path="/actionModifUtilisateur" 
        scope="request" 
        validate = "false" 
        type="ActionModifUtilisateur">
    <forward name="succes" path="/modifUtilisateur.jsp"/>
    <forward name="echec" path="/com_echec.jsp"/>
</action>
 
<action input="/modifUtilisateur.jsp"
                name="formModifUtilisateur" 
                path="/actionValidModifUtilisateur" 
                scope="request"
                validate="true" 
                type="ActionValidModifUtilisateur">
            <forward name="succes" path="/modifUtilisateur.jsp"/>
            <forward name="echec" path="/com_echec.jsp"/>
        </action>
La page modifUtilisateur.jsp contient le code suivant pour la liste :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
<html:select styleId="listeUtilisateurs" property="listeUtilisateurs">
   <html:optionsCollection property="nomsUtilisateurs" value="value" label="label" />
</html:select>
FormModifUtilisateur.java

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
 
Collection<String> listeUtilisateurs  = new ArrayList<String>();
 
public Collection<String> getListeUtilisateurs(){
    return this.listeUtilisateurs;
}
 
public void setListeUtilisateurs( Collection<String> listeUtilisateurs){
    this.listeHobbies = listeHobbies;
}
 
private Collection<LabelValueBean> nomsUtilisateurs = new ArrayList<LabelValueBean>();
 
public Collection<LabelValueBean> getNomsUtilisateurs(){
    return this.nomsUtilisateurs;
}
 
public void setNomsUtilisateurs( Collection<LabelValueBean> nomsUtilisateurs){
 
    this.nomsUtilisateurs = nomsUtilisateurs;
}
J'obtient ainsi un formulaire avec une liste déroulante proposant la liste des nom d'utilisateurs de la BD.

J'ai ensuite ajouté volontairement une erreur dans l'objet ActionErrors retourné par la méthode validate.

Ce que j'aimerais, lorsqu'il y a des erreurs de saisi dans le formulaire, c'est retrouver mon formulaire inchangé, avec les listes de selections générée à la première création du formulaire.

Je suis pour l'instant passé par toute sorte d'exception, celle que j'ai actuellement étant :

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
 
exception
 
javax.servlet.ServletException: BeanUtils.populate
	org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1254)
	org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
 
cause mère
 
java.lang.IllegalArgumentException: argument type mismatch
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	java.lang.reflect.Method.invoke(Method.java:597)
	org.apache.commons.beanutils.PropertyUtils.setSimpleProperty(PropertyUtils.java:1789)
	org.apache.commons.beanutils.PropertyUtils.setNestedProperty(PropertyUtils.java:1684)
	org.apache.commons.beanutils.PropertyUtils.setProperty(PropertyUtils.java:1713)
	org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:1019)
	org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)
	org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1252)
	org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
Je ne pense pas avoir une assez bonne vision globale du fonctionnement de struts et je doit mal m'y prendre, mais j'ai beau écumer le web, je ne trouve pas de réponse qui résolve mon problème.