Bonjour,
Je suis certain que cela doit être tout bête, mais je cherche depuis hier !
Je souhaite créer une liste de boutons radio par Struts-Layout. Je crée dans une JSP classique un formulaire, appuyé sur un bean. Malheureusement, une exception monte...
J'ai regardé plusieurs exemples ainsi que la FAQ Struts-Layout, mais je ne trouve rien :aie:
Je ne comprends pas mon erreur. Cependant, je me demande l'erreur ne viendrait pas de créer la liste des labels de boutons dans le constucteur du bean ?
J'ai l'exception suivante :
Voici la classe MainCinqCartesForm, le bean :Citation:
type Rapport d'exception
message
description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.
exception
org.apache.jasper.JasperException: Cannot find bean under name listeValeurs
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:460)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:355)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
cause mère
javax.servlet.ServletException: Cannot find bean under name listeValeurs
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774)
org.apache.jsp.pages.accueil_jsp._jspService(accueil_jsp.java:82)
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:331)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
cause mère
javax.servlet.jsp.JspException: Cannot find bean under name listeValeurs
fr.improve.struts.taglib.layout.util.LayoutUtils.getBeanFromPageContext(LayoutUtils.java:203)
fr.improve.struts.taglib.layout.util.LayoutUtils.getIterator(LayoutUtils.java:302)
fr.improve.struts.taglib.layout.field.OptionsTag.getIterator(OptionsTag.java:211)
fr.improve.struts.taglib.layout.field.OptionsTag.doEndTag(OptionsTag.java:122)
org.apache.jsp.pages.accueil_jsp._jspx_meth_layout_005foptions_005f0(accueil_jsp.java:245)
org.apache.jsp.pages.accueil_jsp._jspx_meth_layout_005fradios_005f0(accueil_jsp.java:218)
org.apache.jsp.pages.accueil_jsp._jspx_meth_layout_005fform_005f0(accueil_jsp.java:184)
org.apache.jsp.pages.accueil_jsp._jspx_meth_layout_005fhtml_005f0(accueil_jsp.java:113)
org.apache.jsp.pages.accueil_jsp._jspService(accueil_jsp.java:75)
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:331)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
La classe Carte :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
96
97
98
99
100
101
102 public class MainCinqCartesForm extends ActionForm { private Carte C1 = new Carte(); private Carte C2 = new Carte(); private Carte C3 = new Carte(); private Carte C4 = new Carte(); private Carte C5 = new Carte(); private ArrayList<String>ListeValeurs = new ArrayList<String>(); private ArrayList<String>ListeCouleurs = new ArrayList<String>(); private int valeur; private int couleur; public MainCinqCartesForm() { super(); for (int i = 0; i < Constantes.Valeurs.length; i ++) this.ListeValeurs.add(Constantes.Valeurs[i]); for (int i = 0; i < Constantes.Couleurs.length; i ++) this.ListeCouleurs.add(Constantes.Couleurs[i]); } public Carte getC1() { return C1; } public void setC1(Carte c1) { C1 = c1; } public Carte getC2() { return C2; } public void setC2(Carte c2) { C2 = c2; } public Carte getC3() { return C3; } public void setC3(Carte c3) { C3 = c3; } public Carte getC4() { return C4; } public void setC4(Carte c4) { C4 = c4; } public Carte getC5() { return C5; } public void setC5(Carte c5) { C5 = c5; } public ArrayList<String> getListeCartes() { return ListeValeurs; } public void setListeCartes(ArrayList<String> listeCartes) { ListeValeurs = listeCartes; } public ArrayList<String> getListeCouleurs() { return ListeCouleurs; } public void setListeCouleurs(ArrayList<String> listeCouleurs) { ListeCouleurs = listeCouleurs; } public int getCouleur() { return couleur; } public void setCouleur(int couleur) { this.couleur = couleur; } public ArrayList<String> getListeValeurs() { return ListeValeurs; } public void setListeValeurs(ArrayList<String> listeValeurs) { ListeValeurs = listeValeurs; } public int getValeur() { return valeur; } public void setValeur(int valeur) { this.valeur = valeur; } }
La classe Constantes :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 public class Carte { private String couleur; private String valeur; private int force; public Carte(String couleur, String valeur, int force) { super(); this.couleur = couleur; this.valeur = valeur; this.force = force; } public Carte(String couleur, String valeur) { this(couleur, valeur, 0); } public Carte() { this("", "", -1); } public String getCouleur() { return couleur; } public void setCouleur(String couleur) { this.couleur = couleur; } public String getValeur() { return valeur; } public void setValeur(String valeur) { this.valeur = valeur; } public int getForce() { return force; } public void setForce(int force) { this.force = force; } public String toString() { return this.valeur + " de " + this.couleur; } }
Voici la JSP :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 public class Constantes { public static final String _AS = "As"; public static final String Couleurs[]= {"Carreau", "Coeur", "Pique", "Trèfle"}; public static final String Valeurs[] = {"Deux", "Trois", "Quatre", "Cinq", "Six", "Sept", "Huit", "Neuf", "Dix", "Valet", "Dame", "Roi", _AS}; public static final int Force[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; /* Pour comparer */ public static final int PLUS_FORT = 1; public static final int EGAL = 0; public static final int PLUS_PETIT = -1; /* On sait jamais, ça peut servir ! */ public static final int TAILLE_MAIN = 5; /* Les combinaisons */ public static final int QUINTE_FLUSH = 8; public static final int CARRE = 7; public static final int FULL = 6; public static final int COULEUR = 5; public static final int QUINTE = 4; public static final int BRELAN = 3; public static final int DEUX_PAIRES = 2; public static final int PAIRE = 1; public static final int CARTE_ELEVEE = 0; public static final String Comb_Labels[] = {"Carte élevée", "Paire", "Deux paires", "Brelan", "Quinte", "Couleur", "Full", "Carré", "Quinte Flush"}; public static final int Comb_Force[] = {CARTE_ELEVEE, PAIRE, DEUX_PAIRES, BRELAN, QUINTE, COULEUR, FULL, CARRE, QUINTE_FLUSH}; }
Et enfin, struts-config.xml :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 <%@ taglib uri="/WEB-INF/tld/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/tld/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/tld/struts-layout.tld" prefix="layout" %> <layout:html> <head> <title><bean:message key="welcome.title"/></title> </head> <body> <h1><bean:message key="welcome.heading"/></h1> <layout:form action="/accueil"> <table> <tr> <td>Valeurs : </td> <td> <layout:radios property="valeur"> <layout:options name="listeValeurs"/> </layout:radios> </td> </tr> </table> </layout:form> </body> </layout: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 <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <!-- ================================================ Form Bean Definitions --> <form-beans> <form-bean name="MainCinqCartesForm" type="bean.MainCinqCartesForm"/> </form-beans> <!-- ========================================= Global Exception Definitions --> <global-exceptions> <!-- sample exception handler <exception key="expired.password" type="app.ExpiredPasswordException" path="/changePassword.jsp"/> end sample --> </global-exceptions> <!-- =========================================== Global Forward Definitions --> <global-forwards> <forward name="/accueil" path="/accueil.do"/> </global-forwards> <!-- =========================================== Action Mapping Definitions --> <action-mappings> <action path="/accueil" name="MainCinqCartesForm" type="servlets.Accueil"/> </action-mappings> <!-- ======================================== Message Resources Definitions --> <message-resources parameter="MessageResources" /> <!-- =============================================== Plug Ins Configuration --> <!-- ======================================================= Tiles plugin --> <!-- =================================================== Validator plugin --> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/org/apache/struts/validator/validator-rules.xml, /WEB-INF/validation.xml"/> <plug-in className="fr.improve.struts.taglib.layout.workflow.LayoutPlugin"/> </plug-in> </struts-config>