【发布时间】:2014-09-01 01:30:14
【问题描述】:
假设我指定了一个这样的 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 以这种方式行事?
感谢您的意见!
【问题讨论】:
标签: performance jsf el getter