-2

我希望 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() 并缓存页面其余部分的值。

使迭代器静态或

4

1 回答 1

0

请不要使用有副作用的吸气剂......我并不惊讶他们实际上正在缓存这些值,并且没有多少transient可以拯救你。

您可以通过公开List<String> values {get;private set;}然后在 Visualforce 调用中{!values[3]}甚至{!values[i]}(其中i可以是来自控制器的 Integer 变量,或者即使<apex:variable>这非常核心......只需对控制器中的字符串/页面名称数组进行排序并以“固定顺序”显示它们" 使用 VF 端的索引?

(顺便说一下,数组语法非常强大,如果你有String fieldName = 'AccountNumber';,你可以{!acc[fieldName]}在 VF 中进行运行时绑定)

另一种选择是探索动态 Visualforce 组件?不过,您似乎不能使用它们<apex:include>。但是我知道如果这有帮助的话,我过去没有任何问题,包括重复的自定义组件......

于 2012-11-28T00:17:49.663 回答