Pour pouvoir modifier les éléments de la collection, il serait mieux de définir tasksList comme propriété d'une ActionForm avec getter et setter.
Dans l'Action qui s'exécute avant l'affichage de la jsp, au lieu de la mettre dans le scope via un setAttribute, il faudrait initialiser le formulaire via :
1 2
| TonActionForm tonActionForm=(TonActionForm) form;
tonActionForm.setTasksList(tasksList) ; |
Ceci implique que le form-bean soit référencé dans le mapping de cette Action dans le struts-config.xml via l'attribut name avec scope="session" et validate="false".
Ensuite, pour l'afficher dans la jsp :
<layout:collection name="nomDeTonFormBean" property="tasksList" id="task" styleClass="FORM" indexId="index">
Pour ouvrir une popup en passant en paramètre l'indexId à une Action :
1 2 3
| <layout:collectionItem title="unePropriete" property="unePropriete">
<layout:button value="Select" onclick="javascript:window.open('uneAction.do?index=${index}','Select','resizable=no, scrollbars=yes, width=300, height=500);void('');"/>
</layout:collectionItem> |
Dans l'Action exécutée lors du clic sur le bouton (dans mon exemple, l'Action de path /uneAction), on récupère le paramètre index et on le met dans le scope :
1 2
| String index = request.getParameter("index");
request.getSession().setAttribute("index",index) ; |
et dans la jsp dans laquelle tu veux modifier les propriétés d'un bean de la collection :
1 2 3 4 5
| <layout:form action="pathDeTonAction">
<layout:text property="tasksList[${index}].propriete1"/>
<layout:text property="tasksList[${index}].propriete2"/>
<layout:submit>OK</layout:submit>
</layout:form> |
dans le mapping de cette Action, il faut bien sûr référencer le même form-bean, celui qui a pour propriété tasksList.
En espérant n'avoir rien oublié.
Partager