2010-09-16 6 views
0

Le Tapestry loop documentation montre l'exemple suivantboucle à travers une collection sans une propriété « valeur » dans la tapisserie

<t:loop source="pageNames" value="pageName"> 
    <td class="${tabClass}"> 
     <t:pagelink page="pageName">${pageName}</t:pagelink> 
    </td> 
</t:loop> 

où la variable pageName est repris à partir du composant:

@Property 
private String _pageName; 

Je n'ai pas besoin pour une telle propriété. La suppression de la déclaration du composant rend la table Tapestry triste et génère une exception semblable à

Impossible de convertir 'nompage' en une liaison de paramètre de composant. La classe ... ne contient pas de propriété nommée 'pageName' (dans l'expression de propriété 'pageName'). Propriétés disponibles: ...

Comment utiliser une balise de boucle sans déclarer de propriété pour la valeur de boucle?

Répondre

2

Je ne pense pas que vous devez spécifier t:value, laissez-le simplement. Dans certains cas, vous voulez juste utiliser t:index, c'est tout à fait correct.

Modifier basé sur le commentaire:

Oui, il n'y a pas moyen de déclarer une propriété dans la classe du composant. Il peut sembler légèrement inélégant quand vous ne faites rien avec la valeur d'itération courante dans la classe de composant, c'est vrai. J'ai tendance à utiliser des getters et des setters au lieu de l'annotation @Property dans de tels cas pour éviter l'avertissement du compilateur "inutilisé".

+0

Merci pour la réponse. Le point est que si je veux accéder à une sorte d'information de l'itération, comme la valeur et l'index, j'ai besoin de déclarer une propriété, non? –

+0

@Robert: Maintenant, je vois ce que vous étiez après, j'ai mis à jour ma réponse. – Henning

+0

Merci pour la clarification. –

2

Vous pouvez préfixer la variable temporaire dans le modèle avec le préfixe var. Donc, dans votre cas, vous diriez simplement value="var:pagename". Cela fonctionne correctement si pagename est une primitive telle qu'une chaîne ou un entier et vous pouvez accéder à sa valeur n'importe où dans la boucle en utilisant la syntaxe suivante ${var:pagename}. Il échoue cependant lorsque vous essayez d'accéder à ses propriétés, telles que pagename.name.

Jetez un oeil here pour une liste des expressions de liaison disponibles pour voir d'autres endroits (tels que les catalogues de messages) d'où vous pouvez tirer des valeurs.

Ou vous pouvez toujours utiliser @SuppressWarnings("unused") dans votre classe de page sur la propriété pour supprimer l'avertissement du compilateur.

Cheers.

Questions connexes