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

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 :

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)
Voici la classe MainCinqCartesForm, le bean :

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
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 Carte :
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
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; 
	}
}
La classe Constantes :
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
 
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};
}
Voici la 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
 
<%@ 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>
Et enfin, 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
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>