Diciamo che specifica un componente outputText come questo:
<h:outputText value="#{ManagedBean.someProperty}"/>
Se stampo un messaggio di registro quando someProperty
viene chiamato il getter per e carico la pagina, è banale notare che il getter viene chiamato più di una volta per richiesta (due o tre volte è quello che è successo nel mio caso):
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
Se il valore di someProperty
è costoso da calcolare, questo può potenzialmente essere un problema.
Ho cercato su Google un po 'e ho pensato che questo fosse un problema noto. Una soluzione alternativa consisteva nel includere un controllo e vedere se era già stato calcolato:
private String someProperty;
public String getSomeProperty() {
if (this.someProperty == null) {
this.someProperty = this.calculatePropertyValue();
}
return this.someProperty;
}
Il problema principale è che ottieni un sacco di codice boilerplate, per non parlare delle variabili private che potresti non aver bisogno.
Quali sono le alternative a questo approccio? C'è un modo per raggiungere questo obiettivo senza tanto codice inutile? C'è un modo per impedire a JSF di comportarsi in questo modo?
Grazie per il tuo contributo!