2012-04-28 43 views
0

MyFaces的,似乎在此组件被忽略了我的电话,以getStateHelper.put():Apache MyFaces JSF2.0 bug: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(); 
} 

... 
} 

正如你所看到的,在前端组件调用下一页,我们的目标是通过一个推进页码。但是,在MyFaces中运行时,eval()调用将适用于立即请求生命周期,但下一个请求将返回0.如果我将null替换为0,则获得NPE。

pageNumber状态需要在组件的生命周期中进行,而不仅仅是当前的请求。我究竟做错了什么?此代码在Mojarra下运行良好,但不在MyFaces中运行。

+0

scope = session? – esej 2012-04-28 20:12:17

+0

是\ @ViewScoped ...为简洁起见,我在\ @SessionScoped上试过它。同样的结果... – 2012-04-28 20:27:24

回答

2

原来,这实际上是MyFaces中某处的错误。我在Apache TomEE beta2中运行这个。它包括MyFaces 2.1.2。我用2.1.7替换了罐子,问题解决了。

感谢您的期待!