Почему 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 таким образом?

Спасибо за ваш вклад!

Ответы на вопрос(8)

Ваш ответ на вопрос