Digamos que eu especifique um componente outputText como este:
<h:outputText value="#{ManagedBean.someProperty}"/>
Se eu imprimir uma mensagem de log quando o getter for someProperty
for chamado e carregar a página, será trivial notar que o getter está sendo chamado mais de uma vez por solicitação (duas ou três vezes foi o que aconteceu no meu 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 o valor de someProperty
for caro de calcular, isso pode ser um problema.
Pesquisei um pouco no Google e percebi que esse é um problema conhecido. Uma solução alternativa era incluir uma verificação e verificar se ela já havia sido calculada:
private String someProperty;
public String getSomeProperty() {
if (this.someProperty == null) {
this.someProperty = this.calculatePropertyValue();
}
return this.someProperty;
}
O principal problema disso é que você obtém um monte de código padrão, sem mencionar variáveis particulares que podem não ser necessárias.
Quais são as alternativas para essa abordagem? Existe uma maneira de conseguir isso sem tanto código desnecessário? Existe uma maneira de impedir que o JSF se comporte dessa maneira?
Obrigado pela sua contribuição!