Pourquoi JSF appels getters plusieurs fois

Disons que je spécifier un outputText composant comme ceci:

<h:outputText value="#{ManagedBean.someProperty}"/>

Si j'ai l'impression d'un journal de message lors de la lecture pour someProperty est appelé et charger la page, il est trivial de remarquer que le getter est appelé plus d'une fois par la demande (deux ou trois fois, c'est ce qui s'est passé dans mon cas):

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

Si la valeur de someProperty est coûteux à calculer, cela peut éventuellement être un problème.

J'ai googlé un peu et pensé que c'est un problème connu. Une solution de contournement a été inclure un contrôle et voir si elle a déjà été calculé:

private String someProperty;

public String getSomeProperty() {
    if (this.someProperty == null) {
        this.someProperty = this.calculatePropertyValue();
    }
    return this.someProperty;
}

Le principal problème avec ceci est que vous obtenez des tonnes de code réutilisable, pour ne pas mentionner les variables privées que vous ne pourriez pas besoin.

Quelles sont les alternatives à cette approche? Il est un moyen d'atteindre cet objectif sans donc beaucoup de code inutile? Est-il un moyen d'arrêter de JSF de se comporter de cette façon?

Merci pour vos commentaires!

InformationsquelleAutor Sevas | 2010-01-18