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中运行。
最佳答案
原来,这实际上是MyFaces中某个地方的错误。我在Apache TomEE beta2中运行它。它包括MyFaces 2.1.2。我用2.1.7代替了罐子,问题得以解决。
感谢您的光临!