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.
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>
Le second exemple par contre ne marche pas: ScalarField.jsp
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.
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>
Une erreur est levée à la ligne en rouge ci-dessus:
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)
...
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.
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