1、Restore View 恢复视图
在这个阶段,首先判断 FacesContext 是否已经存在一个 UIViewRoot,
如果有,设置UIViewRoot 的 Locale(通过 facesContext.getExternalContext().getRequestLocale() 获得Locale),
然后结束此阶段,以免重复创建 UIViewRoot
如果不存在 UIViewRoot,就进行恢复视图的步骤。
恢复视图会调用各个组件(component)的 restoreState 函数。
如果没有视图可以恢复 ( 没有找到任何保存的state,例如第一次进入页面的时候 ),
就创建一个新的视图,直接进入 Render Response 阶段。
在恢复视图的过程中,
如果组件的 binding 属性被设置,
会执行 ValueBinding 的 setValue 函数,对 managed-bean 的相关属性赋值
例如managed-bean:
- private HtmlInputText inputText;
- public HtmlInputText getInputText() {
- return inputText;
- }
- public void setInputText(HtmlInputText inputText) {
- this.inputText = inputText;
- }
页面代码:
- <h:inputText binding="#{exampleBean.inputText}"></h:inputText>
setInputText() 函数在 Restore View 阶段就会被调用,对 inputText 属性赋值
但在创建新视图的时候,这个函数是在 Restore View 阶段之后,Render Response 阶段之前调用的。
参考:JSF 1.1 Spec