Скажем, я указываю компонент 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
дорого рассчитать, это может быть проблемой.
Я немного поработал с Google и понял, что это известная проблема. Одним из способов было включить проверку и посмотреть, была ли она уже рассчитана:
private String someProperty;
public String getSomeProperty() {
if (this.someProperty == null) {
this.someProperty = this.calculatePropertyValue();
}
return this.someProperty;
}
Основная проблема заключается в том, что вы получаете множество кода шаблонов, не говоря уже о частных переменных, которые вам могут не понадобиться.
Каковы альтернативы этому подходу? Есть ли способ достичь этого без лишнего кода? Есть ли способ остановить JSF таким образом?
Спасибо за ваш вклад!