tags:

views:

173

answers:

1

Hi, Is there a way to temporarily save the value of calcuation in a JSF page? I want to do the following without calculating twice:

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

I've tried using the alias bean but I get an error saying java.lang.IllegalArgumentException - row is unavailable.

e.g.

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

Thanks.

+2  A: 

Two ways (at least):

  1. Using lazy-init field of your complexModel. something like:

    private Currency currencyAmount;
    public Currency getCurrencyAmount() {
        if (currencyAmount == null) {
            currencyAmount = calculateCurrencyAmount();
        }
        return currencyAmount;
    }
    
  2. Using the JSTL <c:set> tag:

(the namespace first)

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

then

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

And then the calculated value will be accessible through #{varName}.

Bozho
Does this work with JSF 1.1.?
DD
The first option - yes. The second - I have no idea.One advice - when asking questions about obsolete version of a framework, mention this explicitly.
Bozho
The first option doesnt really suit as I'm output the values in a datatable so the value is dependent on the row...I could have a map but its getting messy as this needs to be cleared when refreshing etc.
DD