如何知道我是否在回发?

Pie*_*igi 18 jsf postback

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

Bal*_*usC 42

如何知道我是否在回发?

取决于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");
}
Run Code Online (Sandbox Code Playgroud)

在JSF 1.2中,确实使用了ResponseStateManager#isPostback()它实际上检查javax.faces.ViewState请求参数映射中是否存在参数.

public static boolean isPostback() {
    FacesContext context = FacesContext.getCurrentInstance();
    return context.getRenderKit().getResponseStateManager().isPostback(context);
}
Run Code Online (Sandbox Code Playgroud)

在JSF 2.0中,改为使用FacesContext#isPostback(),它实际上委托给了ResponseStateManager#isPostback().

public static boolean isPostback() {
    return FacesContext.getCurrentInstance().isPostback();
}
Run Code Online (Sandbox Code Playgroud)

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

Von*_*onC 6

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

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

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

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

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