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 中不行。