当前位置:  开发笔记 > 编程语言 > 正文

如何知道我是否在回发?

如何解决《如何知道我是否在回发?》经验,为你挑选了2个好方法。

我读过JSF文档中ResponseStateManager有一个isPostBack()方法.我如何(以及在​​哪里)拥有一个实例ResponseStateManager



1> BalusC..:

如何知道我是否在回发?

取决于JSF版本.

在JSF 1.0/1.1中,没有ResponseStateManager#isPostback()可用的方法.检查javax.faces.ViewState请求参数映射中是否存在参数ExternalContext#getRequestParameterMap().

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();
}


`facesContext`的当前实例在EL范围内由`#{facesContext}`提供,因此这应该是:`#{facesContext.postback}`.

2> VonC..:

实际上,在jsf1.2之前,isPostBack是通过当前FaceContext实例的requestScope获得的.

从JSF1.2开始,ResponseStateManager(StateManager的助手类,知道用于生成响应的特定渲染技术,一个单独的抽象类,由RenderKit出售.)

在生命周期的恢复视图阶段,ViewHandler检索ResponseStateManager对象,以测试请求是回发还是初始请求.

如果请求是回发,则调用ViewHandler的therestoreView方法.此方法使用ResponseStateManager对象重新构建组件树并恢复状态.构建树并恢复状态后,在再次发生渲染响应阶段之前,不需要ViewHandler实例.

上面提到的那篇文章(创建和使用自定义渲染工具包)说明了如何通过RenderKit实现/获取ResponseStateManager(由实现呈现组件的标记的标记处理程序定义).
这可能足以让您在上下文中获得自己的ResponseStateManager吗?

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有