JSF 不缓存得到的EL的结果。因此,你会发现一个字符串EL值表达式会导致最少一次的getter方法调用,或许有更多次。如果你在JSF控制标签中使用:例 如迭代标签 <h:dataTable />,<h:selectOneMenu /> 等,这样值表达式可能在每次迭代的时候都会调用一次。
你能做点什么呢?确保你的getter方法是轻量级的,and use some sort of lazy initialization.
例如:下面的示例会导致你的List创建多次:
@Name("fooManager")
@Scope(EVENT)
public class FooManager {
public List<Foo> getFoos() {
return createFooList();
}
}
<h:dataTable value="#{fooManager.foos}">
...
下面的示例修复了这个问题:
@Name("fooManager")
@Scope(EVENT)
public class FooManager {
private List<Foo> foos;
public List<Foo> getFoos() {
if (foos == null) {
foos = createFooList();
}
return foos;
}
}
没有评论:
发表评论