我希望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';
}
在visualforce中,我这样使用它:
<!-- 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
似乎visualforce解析器只调用一次getValue()并缓存页面其余部分的值。
使迭代器成为静态或
答案 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]}
使用它们。但是我知道我没有任何问题,包括过去的重复定制组件,如果有任何帮助......