JSF临时变量

时间:2010-02-11 13:42:47

标签: jsf

有没有办法暂时保存JSF页面中的计算值? 我想在不计算两次的情况下执行以下操作:

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

我尝试过使用alias bean,但是收到一条错误,说java.lang.IllegalArgumentException - row不可用。

e.g。

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

感谢。

2 个答案:

答案 0 :(得分:5)

两种方式(至少):

  1. 使用complexModel的lazy-init字段。类似的东西:

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

  3. (名称空间优先)

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

    然后

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

    然后可以通过#{varName}访问计算出的值。

答案 1 :(得分:-2)

在JSF 2.0中,您可以使用它强大的<ui:param/>

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