2014-05-19 39 views
1

我使用的模板,並通過一些值在模板中使用它們:JSF使UI:PARAM結果靜態

<ui:repeat var="entry" value="#{showEntriesBean.entries}" id="repeatId"> 
    <ui:include src="/templates/entryTemplate.xhtml"> 
     <ui:param name="prePath" value="/" /> 
     <ui:param name="allowedToSee" value="#{bean.calcRandom(0, 10)}" /> 
    </ui:include> 
    <br /> 
</ui:repeat> 

我發現,那每次我用「allowedToSee」變量在我entryTemplate。 xhtml,它重新計算它的價值。

有沒有辦法以靜態方式傳遞calcRandom的結果?所以它是一次計算的(當允許TooSee值被計算時)並且像最終數字那樣執行?我不希望每次都使用#{allowedToSee}來計算它

+0

哪個JSF版本,您使用的? – SJuan76

+0

JSF 2.0 myfaces impl。 – Niko

回答

0

如果您希望值保持不變,您應該將它保留在某處。

我會怎麼做:

1)創建一個List<Integer>屬性。

2)當entries屬性的值設置,通話的人數是entries在您的列表介紹了許多項目的方法(preRenderEvent@PostConstruct?)。

3)使用的ui:repeat

多一點少的varStatus屬性,如查閱該列表:

<ui:repeat var="entry" value="#{showEntriesBean.entries}" id="repeatId" varStatus="status"> 
    <ui:include src="/templates/entryTemplate.xhtml"> 
    <ui:param name="prePath" value="/" /> 
    <ui:param name="allowedToSee" value="#{bean.getPrecalculedRandomAt(status.index)}" /> 
    </ui:include> 
    <br /> 
</ui:repeat> 

更多關於varStatus屬性:http://docs.oracle.com/javaee/6/javaserverfaces/2.0/docs/pdldocs/facelets/ui/repeat.html

+0

所以這是預期的行爲 – Niko