假设我像这样指定了一个outputText组件:
<h:outputText value="#{ManagedBean.someProperty}"/>
如果我在调用someProperty
的getter并加载页面时打印日志消息,那么很容易注意到getter在每个请求中被调用了不止一次(在我的情况中发生了两次或三次):
DEBUG 2010-01-18 23:31:40,104 (ManagedBean.java:13) - Getting some property
DEBUG 2010-01-18 23:31:40,104 (ManagedBean.java:13) - Getting some property
如果someProperty
的值计算起来很昂贵,这可能是一个潜在的问题。
我谷歌了一下,发现这是一个已知的问题。一个解决办法是包含一个检查,看看它是否已经计算过:
private String someProperty;
public String getSomeProperty() {
if (this.someProperty == null) {
this.someProperty = this.calculatePropertyValue();
}
return this.someProperty;
}
这样做的主要问题是您会得到大量的样板代码,更不用说您可能不需要的私有变量了。
这种方法的替代方案是什么?有没有一种方法可以在没有这么多不必要的代码的情况下实现这一点?是否有一种方法可以阻止JSF以这种方式行为?
谢谢你的建议!