2010-08-25 114 views
2

我正在開發一個帶有seam/richfaces的Web界面。如何避免重複評估EL

成分的潤通有

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

一些類似於在這種情況下,#{!complexbean.heavyoperation()}被兩次評估。我的問題是,是否有任何類似的if-else語句我可以在頁面中使用,以避免對同一個EL的這些多重評估(並且我想避免使用任何JSP東西,例如%<%if ...%>%)?

謝謝!

回答

5

我看你使用的是Seam。你不能只在你的一個後備豆中使用@Factory嗎?在相同的範圍內,它只會被評估一次。這是它的目的。

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

然後你的觀點:

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

我覺得這是非常清晰的。希望有所幫助:)

0

如果您對jstl沒有任何反應,您可以使用c:choose/c:when/c:otherwise構造。

+0

使用Facelets時不要使用JSTL。由於Facelets的工作方式,如果您使用JSTL標籤,您需要知道自己在做什麼。 – 2010-08-27 11:16:11

+0

你需要知道你一直在做什麼,不是嗎? – spbfox 2010-08-28 19:10:07

+0

不,不是,如果你遠離JSTL。特別是c:forEach標記以及它如何與Facelets進行比較,這是編譯時與運行時間的比較。 – 2010-09-08 20:48:44