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 charge la page, il est trivial de remarquer que le getter est appelé plus d'une fois par 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ûteuse à calculer, cela peut potentiellement être un problème.
J'ai googlé un peu et j'ai pensé que c'était un problème connu. Une solution de contournement consistait à inclure un chèque et à voir s'il avait 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 cela est que vous obtenez des charges de code 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!