MyFaces似乎忽略了我对此组件中getStateHelper.put()的调用:
public class BFTableComponent extends UINamingContainer {
...
private void setCurrentPageNumber(int currentPageNumber) {
getStateHelper().put(PropertyKeys.currentPageNumber, currentPageNumber);
}
public int getCurrentPageNumber() {
return (Integer) getStateHelper().eval(PropertyKeys.currentPageNumber, 0);
}
public void nextPage() {
setCurrentPageNumber(getCurrentPageNumber() + 1);
updateCurrentPage();
}
public void previousPage() {
setCurrentPageNumber(getCurrentPageNumber() - 1);
updateCurrentPage();
}
...
}
正如您所看到的,当前端组件调用nextPage时,目标是将页码提前一。但是,当在MyFaces中运行它时,eval()调用将适用于即时请求生命周期,但是下一个请求,它将返回0.如果我将null而不是0,我得到一个NPE。
pageNumber状态需要携带组件的生命周期,而不仅仅是当前请求。我究竟做错了什么?这段代码在Mojarra下运行正常,但在MyFaces中运行不正确。
答案 0 :(得分:2)
事实证明,它实际上是MyFaces中的一个错误。我在Apache TomEE beta2中运行它。它包括MyFaces 2.1.2。我用2.1.7取代了罐子,问题就解决了。
感谢您的期待!