Katakanlah saya menentukan komponen outputText seperti ini:
<h:outputText value="#{ManagedBean.someProperty}"/>
Jika saya mencetak pesan log ketika pengambil untuk someProperty
dipanggil dan memuat halaman, itu sepele untuk melihat bahwa pengambil dipanggil lebih dari sekali per permintaan (dua kali atau tiga kali adalah apa yang terjadi dalam kasus saya):
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
Jika nilai someProperty
mahal untuk dihitung, ini berpotensi menjadi masalah.
Saya sedikit Google dan menemukan ini adalah masalah yang diketahui. Salah satu solusinya adalah memasukkan cek dan melihat apakah sudah dihitung:
private String someProperty;
public String getSomeProperty() {
if (this.someProperty == null) {
this.someProperty = this.calculatePropertyValue();
}
return this.someProperty;
}
Masalah utama dengan ini adalah Anda mendapatkan banyak kode boilerplate, belum lagi variabel pribadi yang mungkin tidak Anda butuhkan.
Apa alternatif dari pendekatan ini? Apakah ada cara untuk mencapai ini tanpa begitu banyak kode yang tidak perlu? Apakah ada cara untuk menghentikan JSF dari berperilaku dengan cara ini?
Terima kasih atas masukan Anda!