我正在使用h:datatable,这是我的代码的重要部分:
<h:dataTable value="#{account.latestIncomes}" var="mov" >
.....
</h:dataTable>
然后我有一个Request scoped managedBean,带有最新收入的getter:
public List<Movs> getlatestIncomes() {
if (incomes == null)
incomes = this.cajaFacade.getLatestIncomes(20);
return incomes;
}
这个getter被调用了8次,我没有在其他地方使用它,只是在dataTable的值上。为什么会这样?如果您需要更多代码,请询问。但那是我使用该房产的唯一地方。
答案 0 :(得分:2)
只要JSF需要访问它就可以调用它。从技术上讲,你不应该担心这一点。
但是,对于给定的代码片段,应该在渲染响应阶段期间以最高3次调用它。在encodeBegin()
期间,encodeChildren()
期间和encodeEnd()
期间一次。或者它是否包含输入元素,您是否在表单提交期间计算了?
无论如何,调试堆栈和getter中的当前阶段ID都应该给出一些见解。
private List<Movs> latestIncomes;
private AtomicInteger counter = new AtomicInteger();
@PostConstruct
public void init() {
latestIncomes = cajaFacade.getLatestIncomes(20);
}
public List<Movs> getlatestIncomes() {
System.err.printf("Get call #%d during phase %s%n", counter.incrementAndGet(),
FacesContext.getCurrentInstance().getCurrentPhaseId());
Thread.dumpStack();
return latestIncomes;
}
(如您所见,我将列表加载到正确的位置)