Bonjour,
Je souhaite obtenir un formulaire rempli au premier affichage par des données issues d'un fichier xml. Ce formulaire peut par la suite être modifié par l'utilisateur.
Tout fonctionne, sauf "l'initialisation" du formulaire. Voici le code simplifié au maximum et qui présente le problème :
index.jsp
liste.jsp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> <html> <head> <title>Test de liste</title> </head> <body> <html:link forward="liste">Afficher la liste</html:link><br> </body> </html>
ListeForm.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> <html> <head> <title> Test de Liste </title> </head> <body> <html:form action="/liste"> <html:select property="liste" /> le nom de la liste est <%=request.getParameter("name")%> </html:form> </body>
ListeAction.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
22
23
24
25
26
27
28
29
30
31
32
33 package monpackage; import java.util.ArrayList; import org.apache.struts.action.ActionForm; public class ListeForm extends ActionForm { private static final long serialVersionUID = 1461018176686577004L; private String name; private ArrayList liste; public void setName(String name) { this.name=name; } public String getName() { return this.name; } public void setListe (ArrayList liste) { this.liste = liste; } public ArrayList getListe() { return this.liste; } public void reset() { this.name = null; this.liste = null; } }
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
34
35 package monpackage; import java.util.ArrayList; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public class ListeAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ListeForm formulaire = (ListeForm) form; String name1 = "coucou"; String name2 = "coucou2"; ArrayList<String> liste = new ArrayList<String>(); liste.add(name1); liste.add (name2); formulaire.setListe(liste); request.setAttribute("liste", liste); formulaire.setName("test"); request.setAttribute("name", "test"); return mapping.getInputForward(); } }
Tout ceci donne pour résultat un menu déroulant vide. et un paramètre name = null dans la page liste.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 <?xml version="1.0"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> <struts-config> <form-beans> <form-bean name="listeForm" type="monpackage.ListeForm"/> </form-beans> <global-forwards> <forward name="liste" path="/liste.do"/> </global-forwards> <action-mappings> <action path="/liste" type="monpackage.ListeAction" name="listeForm" scope="session" validate="false" input="/liste.jsp"> </action> </action-mappings> </struts-config>
Est-ce que quelqu'un saurait pourquoi?
En lisant des docs j'ai cru comprendre que le processus est le suivant :
il lit le liste.jsp, il voit le html:form, le bean listeForm n'existant pas, il n'instancie, il effectue le reset, il effectue l'action, et il effectue le populate() du bean en utilisant les attributs de la requête ( qui sont présents grâce aux request.setAttribute() de l'action ).
Me trompe-je?
Merci
PS : Je précise que je ne souhaite pas passer par une rédéfinition de la méthode init() car je souhaite pouvoir repasser plusieurs fois par cette action ( avec enregistrement du fichier xml ) dans la même session.
J'utilise struts 1.3.8 / Tomcat 6.0.13 / SYsdeo 3.2.1 / eclipse 3.2.2
Partager