Bean的getter在那里就 可以 从视图侧 访问
模型数据。可以多次调用它们。通常一或两次,但可以长到几百倍,特别是当还使用
UIData组件或其他属性比
value(如
rendered,
disabled等)。通常这没有害处,因为它只是一个简单的方法调用,通常不要在吸气剂中进行昂贵的数据加载逻辑或计算。预加载/初始化通常是在bean构造函数和/或bean操作方法中完成的。实际上,getter应该仅
返回 数据(如有必要,还应进行 延迟加载 )。
如果
getApplication().getKunden(getNameFilterPattern());执行的任务非常昂贵,则应将其移至bean构造函数,bean
@PostConstruct方法,bean初始化块或bean操作方法,或在getter中引入 延迟加载 模式。这是一个示例,显示了如何执行所有操作:
public class Bean { private String nameFilterPattern; private List<Kunde> kunden; // Load during bean construction. public Bean() { this.kunden = getApplication().getKunden(getNameFilterPattern()); } // OR load during @PostConstruct (will be invoked AFTER construction and resource injection. @PostConstruct public void init() { this.kunden = getApplication().getKunden(getNameFilterPattern()); } // OR during bean initialization (this is invoked BEFORE construction and will apply to ALL constructors). { this.kunden = getApplication().getKunden(getNameFilterPattern()); } // OR during bean action method (invoked from h:commandlink/Button). public String submit() { this.kunden = getApplication().getKunden(getNameFilterPattern()); return "navigationCaseOutcome"; } // OR using lazy loading pattern in getter method. public List<Kunde> getKunden() { if (this.kunden == null) this.kunden = getApplication().getKunden(getNameFilterPattern()); } return this.kunden; }在您的特定情况下,我认为这是
@PostConstruct(如果
nameFilterPattern要从
GET请求参数获取),或者只是bean操作方法(如果
nameFilterPattern要从
POST表单输入字段获取)是合适的。
要了解有关JSF生命周期的更多信息,您可能会发现这篇自我实践文章很有用。



