怎么知道我是不是在回发?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (123)

我阅读过JSF文档,它ResponseStateManager有一个isPostBack()方法。我如何(以及在​​哪里)有一个实例ResponseStateManager

提问于
用户回答回答于

如何知道我是否在回传?

取决于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();
}
用户回答回答于

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

由于JSF1.2,ResponseStateManager(知道用于生成响应的特定呈现技术的StateManager的助手类,是由RenderKit 提供的单例抽象类)。

在生命周期的还原视图阶段,ViewHandler会检索ResponseStateManager对象以测试请求是回发还是初始请求。 如果请求是回发,则调用ViewHandler的therestoreView方法。此方法使用theResponseStateManager对象重新构建组件树并恢复状态。在构建树并且恢复状态之后,直到呈现响应阶段再次出现时,不需要ViewHandler实例。

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

所属标签

可能回答问题的人

  • Hanzo

    2 粉丝0 提问5 回答
  • software

    10 粉丝488 提问3 回答
  • Richel

    9 粉丝0 提问3 回答
  • 不吃貓的鱼oo

    6 粉丝466 提问2 回答

扫码关注云+社区

领取腾讯云代金券