这是一个简单的测试用例,一次显示一页客户列表:
<h:form>
<h:commandButton action="#{controller.nextPage()}" value="Next" />
<ui:repeat value="#{controller.customerList}" var="c">
#{c.name}<br/>
</ui:repeat>
</h:form>
public String nextPage() {
//...
return null;
}
在回发期间,getCustomerList() 在恢复视图、应用请求值和呈现响应阶段被调用。只有在渲染响应阶段调用该方法时才有意义。其他两个调用似乎完全是浪费,除了给数据库带来过多的负载外,没有任何用处。在恢复视图阶段加载列表后,我无法缓存列表,因为必须在渲染响应阶段加载下一页的不同列表。我不希望将托管 bean 存储在会话中,因为这会耗尽内存。
您能否解释一下为什么 JSF 必须调用 ui:repeat 的属性 getter 方法在恢复视图和应用请求值阶段,而当时没有调用托管 bean 的其他属性 getter?谢谢。