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代替了罐子,问题得以解决。

感谢您的光临!

10-07 12:25