Disons que je spécifie un composant outputText comme ceci :
<h:outputText value="#{ManagedBean.someProperty}"/>
Si j'imprime un message de journal lorsque le getter pour someProperty
est appelé et que la page est chargée, il est trivial de remarquer que le getter est appelé plus d'une fois par requête (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 potentiellement poser un problème.
J'ai fait quelques recherches sur Internet et je me suis dit que c'était un problème connu. Une solution de contournement consistait à inclure une vérification pour voir si le calcul avait déjà été effectué :
private String someProperty;
public String getSomeProperty() {
if (this.someProperty == null) {
this.someProperty = this.calculatePropertyValue();
}
return this.someProperty;
}
Le principal problème est qu'il en résulte une multitude de codes passe-partout, sans parler des variables privées dont vous pourriez ne pas avoir besoin.
Quelles sont les alternatives à cette approche ? Existe-t-il un moyen d'y parvenir sans autant de code inutile ? Existe-t-il un moyen d'empêcher JSF de se comporter de cette manière ?
Merci pour votre contribution !