2010-04-07 2 views
0

Environnement: Seam, richfacesc: forEach.items se répétitivement appelé

L'extrait de code suivant provoque la méthode getUsers à appeler plusieurs fois, comment puis-je éviter cela dans ma demande afin qu'il soit appelé une seule fois.

<c:forEach items="#{userHome.getUsers()}" var="_user"> 
</c:forEach> 

Répondre

4

Une règle générale est d'éviter <c: balises lors de l'utilisation JSF (sauf si vous êtes sûr qu'ils fonctionnent comme prévu)

Ici, vous feriez mieux de repllace avec:

<a4j:repeat value="#{userHome.users}" var ="_user"> 
</a4j:repeat> 

(ou <ui:repeat> si vous utilisez des facettes)

PS Je suppose que getUsers() est l'EL-extension de JBoss, mais je suggère de ne pas utiliser ses fonctionnalités étendues, sauf si vraiment nécessaire.

2

Et pour l'amour de Dieu, si vous vous souciez des performances éviter en utilisant le cadre EntityHome/requête. Il suffit de mettre un point d'arrêt ou de sortie sur votre getResultList() et de voir combien de fois il est appelé. Maintenant, essayez la même chose avec un composant de couture normal. Vous verrez un changement significatif (!)

+0

J'ai vu ce comportement où les méthodes sont appelées plusieurs fois, l'annotation Factory n'est pas censée résoudre ce problème. – Joe

+0

C'est une approche. Vous pouvez également utiliser Unwrap. Mais vous ne pouvez pas avoir d'usine sur toutes vos méthodes. (Vous pouvez, mais ce n'est pas sage). –

Questions connexes