Giả sử tôi chỉ định một thành phần đầu ra như thế này:
<h:outputText value="#{ManagedBean.someProperty}"/>
Nếu tôi in một thông điệp tường trình khi getter cho someProperty
được gọi và tải trang, thì việc thông báo rằng getter sẽ được gọi nhiều hơn một lần cho mỗi yêu cầu (không phải hai hoặc ba lần trong trường hợp của tôi)
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
Nếu giá trị của someProperty
là đắt để tính toán, điều này có khả năng có thể là một vấn đề.
Tôi googled một chút và hình dung đây là một vấn đề được biết đến. Một cách giải quyết khác là bao gồm một kiểm tra và xem nếu nó đã được tính toán:
private String someProperty;
public String getSomeProperty() {
if (this.someProperty == null) {
this.someProperty = this.calculatePropertyValue();
}
return this.someProperty;
}
Vấn đề chính với điều này là bạn nhận được vô số mã soạn sẵn, chưa kể các biến riêng tư mà bạn có thể không cần.
Các lựa chọn thay thế cho phương pháp này là gì? Có cách nào để đạt được điều này mà không cần quá nhiều mã không cần thiết? Có cách nào để ngăn chặn JSF hành xử theo cách này không?
Cảm ơn vì đầu vào của bạn!