Angenommen, ich gebe eine outputText-Komponente wie folgt an:
<h:outputText value="#{ManagedBean.someProperty}"/>
Wenn ich eine Protokollnachricht drucke, wenn der Getter für someProperty
aufgerufen wird, und die Seite lade, ist es trivial zu bemerken, dass der Getter mehr als einmal pro Anforderung aufgerufen wird (in meinem Fall ist dies zwei- oder dreimal passiert):
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
Wenn die someProperty
Berechnung des Werts von teuer ist, kann dies möglicherweise ein Problem sein.
Ich habe ein bisschen gegoogelt und festgestellt, dass dies ein bekanntes Problem ist. Eine Problemumgehung bestand darin, eine Überprüfung einzuschließen und festzustellen, ob sie bereits berechnet wurde:
private String someProperty;
public String getSomeProperty() {
if (this.someProperty == null) {
this.someProperty = this.calculatePropertyValue();
}
return this.someProperty;
}
Das Hauptproblem dabei ist, dass Sie eine Menge Boilerplate-Code erhalten, ganz zu schweigen von privaten Variablen, die Sie möglicherweise nicht benötigen.
Was sind die Alternativen zu diesem Ansatz? Gibt es eine Möglichkeit, dies ohne so viel unnötigen Code zu erreichen? Gibt es eine Möglichkeit, JSF daran zu hindern, sich auf diese Weise zu verhalten?
Danke für deinen Beitrag!