2010-02-11 87 views
2

有沒有辦法將計算值臨時保存在JSF頁面中? 我要做到以下幾點不計算兩次:JSF臨時變量

<h:outputText value="#{complexModel.currencyAmount.currency}"> 
<h:outputText value="#{complexModel.currencyAmount.amount}"> 

我使用別名豆嘗試,但我得到一個錯誤說java.lang.IllegalArgumentException異常 - 行不可用。

例如

<t:aliasBean id="bean" alias="#{bean}" value="#{complexModel.currencyAmount}"> 
    <h:outputText value="#{bean.currency}"> 
    <h:outputText value="#{bean.amount}"> 
</t:aliasBean> 

謝謝。

回答

5

兩種方式(至少):

  1. 使用您complexModel的延遲實例字段。是這樣的:

    private Currency currencyAmount; 
    public Currency getCurrencyAmount() { 
        if (currencyAmount == null) { 
         currencyAmount = calculateCurrencyAmount(); 
        } 
        return currencyAmount; 
    } 
    
  2. 使用JSTL <c:set>標籤:

(命名空間第一)

xmlns:c="http://java.sun.com/jstl/core" 

然後

<c:set var="varName" value="#{complexModel.currencyAmount}" /> 

然後計算出的值會根據通過#{varName}可以確定。

+0

這是否適用於JSF 1.1? – 2010-02-11 14:12:45

+0

第一個選項 - 是的。第二 - 我不知道。 一個建議 - 當提出有關框架過時版本的問題時,請明確提及。 – Bozho 2010-02-11 14:16:36

+0

第一個選項並不適合,因爲我輸出數據表中的值,所以該值取決於行...我可以有一個地圖,但它變得混亂,因爲這需要清除時刷新等。 – 2010-02-11 14:26:21

-2

在JSF 2.0中,您可以使用<ui:param/>,它功能強大。

<ui:param name="foo" value="#{zhangsan.foo}"/> 
+0

閱讀部分「 vs 」here:http://stackoverflow.com/questions/3342984/jstl-in-jsf2-facelets-makes-sense – BalusC 2016-01-17 14:51:20

+0

謝謝,我學習了很多。 – Jallen 2016-01-17 15:03:08