Bonjour,
je suis en train de coder des formulaires avec pas mal de 'types de champs' communs. Du coup, je désire m'aider de struts-tiles pour factoriser au maximum les vues.
Toutes mes tiles sont insérées dans la page 'principale' du formulaire comme ceci (MaForm.jsp):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <html:form action="/edition/testForm"> <!-- Premier exemple simple qui marche --> <tiles:insert page="SimpleFieldTile.jsp" > <tiles:put name="beanName" value="operatorName" /> </tiles:insert> <!-- Deuxième exemple scalaire qui ne marche pas --> <tiles:insert page="ScalarField.jsp" > <tiles:put name="beanName" value="emailsBean" /> </tiles:insert> </html:form>
Le premier exemple d'appel de la première tile (SimpleFieldTile.jsp) fonctionne parfaitement: elle utilise le String 'operatorName' défini dans ma classe dérivée d'ActionForm. J'obtiens bien ce que je veux, à savoir le champ rempli avec le contenu de de mon ActionForm.
Le second exemple par contre ne marche pas: ScalarField.jsp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <tiles:useAttribute id="beanName" name="beanName" classname="java.lang.String" /> <div class="fieldWidget"> <html:text property="${beanName}" size="70"/> </div>
Il fait appel à une seconde tile qui doit s'occuper d'un bean complexe (un bean contenant un champ String 'mailsLanguages' et une ArrayList 'list') et itérer dessus pour afficher un champ HTML:text par item.
Une erreur est levée à la ligne en rouge ci-dessus:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <tiles:useAttribute id="beanName" name="beanName" classname="java.lang.String" /> <html:text property="${beanName}.mailsLanguages" size="70"/> <nested:iterate property="${beanName}.list" indexId="index"> <div class="fieldSubPart"> <nested:text property="email"/> </div> </nested:iterate>
Ce qui me paraît d'autant plus incompréhensible, c'est que l'accès à une propriété du bean fonctionne bien à la ligne verte puisqu'elle ne lève aucune erreur.javax.servlet.jsp.JspException: Cannot find bean: "" in any scope
at org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:864)
at org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:236)
at org.apache.struts.taglib.nested.logic.NestedIterateTag.doStartTag(NestedIterateTag.java:94)
...
Par contre, ça ne fonctionne plus pour paramétrer mon nested:iterate.
De plus, le même code écrit directement dans le formulaire (modulo les ${beanName} et ${fieldMessageName} remplacés par les vrais noms des attributs de mon ActionForm) fonctionne également sans souci.
Quelqu'un aurait-il une petite idée ? Les tags 'nested' ont-ils besoin de quelque chose de particulier comparé aux tags 'html' ?
Merci d'avance![]()
Partager