สมมติว่าฉันระบุองค์ประกอบ outputText ดังนี้:
<h:outputText value="#{ManagedBean.someProperty}"/>
ถ้าฉันพิมพ์ข้อความบันทึกเมื่อเรียกใช้ getter someProperty
และโหลดเพจมันเป็นเรื่องเล็กน้อยที่จะสังเกตเห็นว่ามีการเรียกใช้ getter มากกว่าหนึ่งครั้งต่อการร้องขอ (สองหรือสามครั้งเป็นสิ่งที่เกิดขึ้นในกรณีของฉัน):
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
หากมูลค่าของ someProperty
การคำนวณนั้นมีราคาแพงอาจเป็นปัญหาได้
ฉัน googled เล็กน้อยและคิดว่านี่เป็นปัญหาที่ทราบแล้ว วิธีแก้ไขปัญหาหนึ่งคือการรวมการตรวจสอบและดูว่ามีการคำนวณแล้วหรือไม่:
private String someProperty;
public String getSomeProperty() {
if (this.someProperty == null) {
this.someProperty = this.calculatePropertyValue();
}
return this.someProperty;
}
ปัญหาหลักของการทำเช่นนี้คือคุณได้รับรหัสสำเร็จรูปจำนวนมากไม่ต้องพูดถึงตัวแปรส่วนตัวที่คุณอาจไม่ต้องการ
ทางเลือกอื่นของแนวทางนี้คืออะไร? มีวิธีในการบรรลุนี้โดยไม่ต้องใช้รหัสไม่จำเป็นมาก มีวิธีที่จะหยุด JSF ไม่ให้ทำเช่นนี้หรือไม่
ขอบคุณสำหรับข้อมูลของคุณ!