2010-08-25 3 views
2

Je suis en train de développer une interface web avec couture/richfaces.Comment éviter l'évaluation répétée de EL

Alot des composants a quelque chose qui ressemble à

<h:panelGrid rendered="#{complexbean.heavyoperation()}"> 
    ... 
</h:panelGrid> 
<h:panelGrid rendered="#{!complexbean.heavyoperation()}"> 
    ... 
</h:panelGrid> 

Dans ce cas, le # {! Complexbean.heavyoperation()} s'évalué deux fois.

Ma question est, y a-t-il quelque chose de similaire à des instructions if-else que je peux utiliser dans la page pour éviter ces multiples évaluations du même EL (% <% si je veux ...%>%)?

Merci!

Répondre

5

Je vois que vous utilisez Seam. Ne pouvez-vous pas utiliser un @Factory dans l'un de vos fèves? Dans le même cadre, il sera évalué seulement une fois. C'est son but.

@Factory("operation") 
public bool heavyComputation() { 
    return true; 
} 

Et votre point de vue:

<h:panelGrid rendered="#{!operation}"> 
    ... 
</h:panelGrid> 
<h:panelGrid rendered="#{!operation}"> 
    ... 
</h:panelGrid> 

Je pense que cela est beaucoup plus claire. J'espère que ça aide :)

0

Si vous n'avez rien contre jstl, vous pouvez utiliser c: choose/c: when/c: sinon construction.

+0

Évitez d'utiliser JSTL à tout prix lorsque vous utilisez Facelets. Vous devez savoir ce que vous faites si vous utilisez des balises JSTL, à cause de la façon dont Facelets fonctionne. –

+0

Vous devez savoir ce que vous faites tout le temps, n'est-ce pas? – spbfox

+0

Non, pas si vous restez loin de JSTL. Spécifiquement la balise c: forEach et comment elle est rendue par rapport à Facelets, qui est le temps de compilation par rapport à l'exécution. –

Questions connexes