Почему JSF вызывает геттеры несколько раз
Допустим, я указываю компонент outputText следующим образом:
<h:outputText value="#{ManagedBean.someProperty}"/>
Если я распечатываю сообщение журнала, когда получатель дляsomeProperty
вызывается и загружает страницу, тривиально заметить, что геттер вызывается более одного раза за запрос (два или три раза это то, что произошло в моем случае):
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 таким образом?
Спасибо за ваш вклад!