JSF, Facelets : duplicateComponentId

By , 29/09/2010

Lors d’un développement, j’ai été confronté à un problème de duplication d’identifiant de composant. J’utilisais des rafraichissements AJAX sur une page XHML (Facelets)  qui incluait une autre page XHTML.

...
<c:forEach items="#{maList}" var="monObjet">
    <ui:include src="page.xhtml">
        <ui:param name="title" value="#{monObjet.title}" />
    </ui:include>
</c:forEach>
...

La duplication se trouvait sur un composant de la page inclue. En cherchant sur les blogs et les forums j’ai trouvé comment rendre indépendant les identifiants des composants de la page inclue entre les itérations et la page “mère”. Il faut utiliser le composant <f:subwiev/> de cette manière :

...
<c:forEach items="#{maList}" var="monObjet">
    <f:subview>
        <ui:include src="page.xhtml">
            <ui:param name="title" value="#{monObjet.title}" />
        </ui:include>
    </f:subview>
</c:forEach>
...

D’après ce que j’ai lu, l’utilisation de <f:subview/> est recommandée mais non obligatoire. Il garantit qu’aucun identifiant de composant dans la page inclue ne rentrera en conflit avec les identifiants des composants de la page “mère”. Attention les composants de la subview ne pourront pas faire de références aux composants en dehors de cette même subview.

Leave a Reply


eight + 6 =

OfficeFolders theme by Themocracy