Mojarra 2.1中的ViewState解码

时间:2015-08-27 12:53:46

标签: jsf jsf-2 viewstate

Mojarra 2.1

我正在尝试找到将javax.faces.ViewState参数解码为类似Map的结构的位置。在UIComponent抽象类中,我没有找到与RestoreView阶段绑定的方法,将String作为parameter接受。方法

public void restoreTransientState(FacesContext context, Object state)
{
    boolean forceCreate = (state != null);
    TransientStateHelper helper = getTransientStateHelper(forceCreate);

    if (helper != null) {
        helper.restoreTransientState(context, state);
    }
 }

据我所知,接受已解码的视图状态并检索之前保存的特定组件的状态。

1 个答案:

答案 0 :(得分:2)

这取决于状态保存方法(服务器与客户端)。

如果客户端状态保存,解码Matcher请求参数的逻辑位于com.sun.faces.renderkit.ClientSideStateHelper#getState(),随后是doGetState()

如果服务器端状态保存,使用由javax.faces.ViewState请求参数表示的标识符从会话中获取和解码状态对象的逻辑位于com.sun.faces.renderkit.ServerSideStateHelper#getState()

无论哪种方式,抽象API都由ResponseStateManager#getState()表示,StateManagementStrategy#restoreView()ViewHandler#restoreView()中调用。前面提到的javadocs精心描述了这个过程。