我读过JSF文档ResponseStateManager
有一个isPostBack()
方法。如何(以及在哪里)可以获得ResponseStateManager
的实例?如何知道我是否在回传?
回答
如何知道我是否在回发?
取决于JSF版本。
在JSF 1.0/1.1中,没有ResponseStateManager#isPostback()
方法可用。检查javax.faces.ViewState
参数是否存在于请求参数映射中,如所示。
public static boolean isPostback() {
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
return externalContext.getRequestParameterMap().contains("javax.faces.ViewState");
}
在JSF 1.2,确实使用ResponseStateManager#isPostback()
这反过来实际检查javax.faces.ViewState
参数在要求参数映射图的存在。
public static boolean isPostback() {
FacesContext context = FacesContext.getCurrentInstance();
return context.getRenderKit().getResponseStateManager().isPostback(context);
}
在JSF 2.0,而使用FacesContext#isPostback()
,这下盖实际上代表们ResponseStateManager#isPostback()
。
public static boolean isPostback() {
return FacesContext.getCurrentInstance().isPostback();
}
我们可以在jsf页面上检查isPostback在java代码中)? – 2012-06-12 06:45:44
的确,在jsf1.2之前,isPostBack是通过requestScope of the current instance of FaceContext获得的。
由于JSF1.2所述的ResponseStateManager(辅助类来StateManager一个知道特定呈现技术被用来产生响应,一个单抽象类,通过的RenderKit贩卖。)
在恢复查看阶段的生命周期,ViewHandler retrieves the ResponseStateManager object为了测试请求是回发还是初始请求。
如果请求是回发,则调用ViewHandler的therestoreView方法。此方法使用theResponseStateManager对象重新构建组件树并恢复状态。在构建树并且恢复状态之后,直到呈现响应阶段再次出现时,不需要ViewHandler实例。
该条上述(Creating and Using a Custom Render Kit)mentionned说明了如何实现/得到一个ResponseStateManager,通过的RenderKit(通过实施使该组件的标记的标记处理程序定义)。
可能这对于您在您的上下文中获取自己的ResponseStateManager足够了吗?
谢谢你的完整性(我投票给你)。我需要一个更实用的提示,那就是我可以得到我的实现正在使用的ResponseStateManager的一个实例:我后来发现,我可以从FacesContext访问RenderKit并使用getResponseStateManager() – 2009-01-09 09:25:59
对于JSF1.2
public static boolean isPostback(){
FacesContext context = FacesContext.getCurrentInstance();
return context != null && context.getExternalContext().getRequestParameterMap().containsKey(ResponseStateManager.VIEW_STATE_PARAM);
}
- 1. 我如何知道推送通知是否在iOS中传递?
- 2. 如何知道图片是否已上传? - 回形针
- 3. 我如何知道我是否在道路两点之间android
- 4. 我如何知道Rabbitmq是否成功?
- 5. 如何知道我的Android设备上是否有传感器?
- 6. 如何知道是否
- 7. 我如何知道回调是否触发了服务器?
- 8. 如何知道是否存在NSUserDefault?
- 9. 如何知道是否正在对angular2
- 10. 我如何知道我是否在使用Rackspace Developer + plus帐户?
- 11. 我如何知道我是否在网络环境中运行?
- 12. 如何知道NSWindow是否是前窗?
- 13. 如何知道表是否是数组?
- 14. 如何知道指针是否是NSObject?
- 15. 系统如何知道我们是否正在上传csv fie或xls文件?
- 16. 我如何知道CPU是否是Haswell或不是
- 17. 我不知道我是否使用&&或||
- 18. 通知中心 - 如何知道是否存在“未读”通知?
- 19. Mercurial不知道是否有回购
- 20. 我如何知道Sound对象是否正在播放?
- 21. 如何知道我是否在通话中使用Android?
- 22. 如何知道我是否在终端服务(TS)会话中?
- 23. 如何知道我的对象是否存在于C++中?
- 24. 我如何知道某些字符是否在字符串中?
- 25. 如何知道我是否正在使用复制或移动?
- 26. 我如何知道脚本是否在iframe中运行
- 27. 如何知道我是否在使用使用Windows API的ARM?
- 28. 如何知道我是否具有管理权限在Windows中?
- 29. 我如何知道连接是否与websockets一起存在?
- 30. 我如何知道HTML属性是否存在,使用Javascript
我从你的评论中看到你已经找到了一个切实可行的解决方案,那很好。你可以在这里发布它作为答案,我会把它投票;) – VonC 2009-01-09 11:28:23