Récuperer des beans dans une JSP provenant d'une Action sans ActionForm
Bonjour,
Je débute en Struts, et je tente d'afficher une liste d'élément dans une page JSP :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
<%@ page contentType="text/html; charset=Cp1252" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-nested" prefix="nested" %>
<html:html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/>
<title></title>
</head>
<body>
<h1>Page liste des Users</h1>
Liste des users<br>
<logic:iterate name="tableauBeanDesNoms" property="nom" id="indice">
Nom : <bean:write name="indice" /><br>
</logic:iterate>
</body>
</html:html> |
Cette liste de beans est crée et comme suit dans ma classe Action ListUserAction :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) {
try {
//recuperation de mon gestionnaire User
GestionUser gest = ((EssaiWebActionServlet)this.getServlet()).getGestionUser();
String[] noms = gest.getListDesNoms();
//on les mets dans un tableau de beans
UserBean[] beansNoms = new UserBean[noms.length];
for (int i=0; i<noms.length;i++){
beansNoms[i] = new UserBean(noms[i]);
}
request.setAttribute("tableauBeanDesNoms",beansNoms);
}
catch (Exception e){
return (mapping.findForward("failure"));
}
return (mapping.findForward("succes"));
} |
Mon fichier struts-config :
Code:
1 2 3 4 5 6 7 8
|
<action
path="/listesDesUsers"
type="struts.appli.action.ListUserAction"
scope="request">
<forward name="succes" redirect="true" path="/vues/listUser.jsp"/>
<forward name="failure" redirect="true" path="/vues/userAddEchec.jsp"/>
</action> |
Voila le message d'erreur que j'obtient quand je demande "listesDesUsers.do" :
Code:
javax.servlet.ServletException: Cannot find bean tableauBeanDesNoms in any scope
Là ça fait un moment que je me prends la tête dessus....et j'avoue que je vois vraiment pas qu'est-ce qui ne va pas.... Le request.setAttribute("tableauBeanDesNoms",beansNoms) ne fait-il pas "remonter" l'attribut jusqu'à ma JSP ?
Merci d'avance pour votre aide.
A+
[Struts] Recuperer des beans dans une JSP provenant d'une Action sans ActionForm
Je suppose que le mapping.findForward("succes") renvoie à la JSP qui précède ton code.
En fait il est conseillé d'utiliser ceci ArrayList<MonBean> maListe = new ArrayList<MonBean>(); pour stocker les résultats. Quand les objets sont stockés dans le ArrayList tu fais bien un :
Code:
1 2 3 4
|
request.setAttribute("tableauBeanDesNoms",maListe);
...
return mapping.findForward("success"); |
Dans ta JSP par contre il me semble que tu oublies un parametre pour <logic:iterate> :
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
|
<%@ page contentType="text/html; charset=Cp1252" %>
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@ taglib uri="/tags/struts-nested" prefix="nested" %>
<html:html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/>
<title></title>
</head>
<body>
<logic:notPresent name="tableauBeanDesNoms">
Pas de chocholat !
</logic:notPresent>
<logic:present name="tableauBeanDesNoms">
<h1>Page liste des Users</h1>
Liste des users<br>
<logic:iterate name="tableauBeanDesNoms" type="MonBean" scope="request" id="indice">
Nom : <bean:write name="indice" property="nom"/><br>
</logic:iterate>
</logic:present>
</body>
</html:html> |
Dis-moi si celà marche.
PPDL.