Digamos que especifico un componente outputText como este:
<h:outputText value="#{ManagedBean.someProperty}"/>
Si imprimo un mensaje de registro cuando someProperty
se llama al captador y se carga la página, es trivial notar que se llama al captador más de una vez por solicitud (dos o tres veces es lo que sucedió en mi 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
Si el valor de someProperty
es costoso de calcular, esto puede ser un problema potencial.
Busqué en Google un poco y pensé que este es un problema conocido. Una solución alternativa era incluir un cheque y ver si ya se había calculado:
private String someProperty;
public String getSomeProperty() {
if (this.someProperty == null) {
this.someProperty = this.calculatePropertyValue();
}
return this.someProperty;
}
El principal problema con esto es que obtienes un montón de código repetitivo, sin mencionar las variables privadas que quizás no necesites.
¿Cuáles son las alternativas a este enfoque? ¿Hay alguna manera de lograr esto sin tanto código innecesario? ¿Hay alguna manera de evitar que JSF se comporte de esta manera?
¡Gracias por tu contribución!