VisualForce只调用一次getter方法

时间:2012-11-27 16:21:07

标签: apex-code visualforce

我希望getter方法在多次调用时返回不同的值。类似于下面的那个:

Iterator<String> itr = new List<String>{'one','two','three','four','five'}.iterator();

public String getValue(){
    if(itr.hasNext())
        return itr.next();
    else
        return 'No more values';
}

中,我这样使用它:

<!-- getNumber() called 5 times in a single visualforce page, NOT in a loop -->
{!value}
{!value}
{!value}
{!value}
{!value}
{!value}

,输出为:

one one one one one one

有没有办法打印出来像:

one two three four five No more values

似乎解析器只调用一次getValue()并缓存页面其余部分的值。

使迭代器成为静态或

1 个答案:

答案 0 :(得分:0)

请不要使用带有副作用的getter ...我并不感到惊讶他们实际上是在缓存这些值而且transient没有任何数量可以拯救你。

您可以通过公开List<String> values {get;private set;}然后在Visualforce中调用{!values[3]}甚至{!values[i]}(其中i可以是来自控制器的整数变量甚至{{ 1}}虽然这是相当硬的...只是在控制器中对字符串/页面名称进行排序,并使用VF侧的索引以“固定顺序”显示它们?

(顺便说一下,数组语法非常强大,如果你有<apex:variable>,你可以在VF中与String fieldName = 'AccountNumber';进行运行时绑定)

另一种选择是探索Dynamic Visualforce组件?看来你不能在{!acc[fieldName]}使用它们。但是我知道我没有任何问题,包括过去的重复定制组件,如果有任何帮助......