JSF 定义了标准的请求处理声明周期。开发人员了解相关知识可以帮助理解例如验证、数据转换、事件处理等操作会在哪个阶段被执行。
JSF 页面通过 UI 组件树进行展示,称作视图(view)。当客户端发起页面请求后,生命周期开始。在整个生命周期过程中,JSF 需要根据之前保存的状态来生成页面。当客户端提交页面的时候,JSF 必须执行几个任务,比如验证视图组件中的输入数据、转换客户端输入的数据为服务端定义的类型、绑定数据到后台 bean。JSF 执行这些任务是通过生命周期中的几个步骤。
不同的应用程序组件都需要经过以下生命周期:
[b]恢复视图[/b]
恢复和创建服务端组件树,用于展示客户端的 UI 信息。
如果客户端第一次请求到某个 URL,那么会创建一个新的 View 对象用于展示,这个视图会保存到当前的 FacesContext 中。如果已经在 FacesContext 找到视图对象,那么就会恢复视图并进行展示。
任何 UI 组件上的自定义转换器、验证器、渲染器也都会在这个时期被恢复。如果 UI 组件上的值直接映射到了后台 bean 的某个属性,那么属性值将会加载并且与 view 关联。大多数的这些操作都会 ViewHandler.restoreView 中进行。
[b]接收请求值[/b]
这个时期会根据客户端提交的请求参数、header、cookie 来更新服务器端组件。
更准确地说,会调用所有组件的 UIComponent.processDecodes 方法。
[b]验证处理[/b]
这个时期会处理 UIComponent 配置的验证和转换。
在这个时期,所有组件的 UIComponent.processValidators 方法将会被调用。如果验证和转换过程中出现错误,此生命周期将会结束并向客户端展示错误信息。
[b]更新数据模型[/b]
到这个时候,说明数据验证已经通过。
UIComponent 的值将会同步到模型对象,通常是后台 Bean。在这个时期,将会调用所有组件的 UIComponent.processUpdates 方法。设置模型对象的值有可能导致事件排队或触发。
[b]
调用应用[/b]
调用业务逻辑和进行页面导航处理。
所有注册到 UIComponent 上的监听器将会被调用。例如,所有的像 command button 或 hyperlink 这样拥有默认事件监听器的 action 组件,它们的事件监听器将会在这个时期被调用。
[b]
渲染响应[/b]
渲染响应到客户端。
在渲染响应之前,应用程序会自动调用 View 的 UIViewRoot.saveState 方法保存状态。
文章来源:[url]http://www.aptusource.org/2014/04/java-ee-7-request-processing-life-cycle-phases/[/url]
JSF 页面通过 UI 组件树进行展示,称作视图(view)。当客户端发起页面请求后,生命周期开始。在整个生命周期过程中,JSF 需要根据之前保存的状态来生成页面。当客户端提交页面的时候,JSF 必须执行几个任务,比如验证视图组件中的输入数据、转换客户端输入的数据为服务端定义的类型、绑定数据到后台 bean。JSF 执行这些任务是通过生命周期中的几个步骤。
不同的应用程序组件都需要经过以下生命周期:
[b]恢复视图[/b]
恢复和创建服务端组件树,用于展示客户端的 UI 信息。
如果客户端第一次请求到某个 URL,那么会创建一个新的 View 对象用于展示,这个视图会保存到当前的 FacesContext 中。如果已经在 FacesContext 找到视图对象,那么就会恢复视图并进行展示。
任何 UI 组件上的自定义转换器、验证器、渲染器也都会在这个时期被恢复。如果 UI 组件上的值直接映射到了后台 bean 的某个属性,那么属性值将会加载并且与 view 关联。大多数的这些操作都会 ViewHandler.restoreView 中进行。
[b]接收请求值[/b]
这个时期会根据客户端提交的请求参数、header、cookie 来更新服务器端组件。
更准确地说,会调用所有组件的 UIComponent.processDecodes 方法。
[b]验证处理[/b]
这个时期会处理 UIComponent 配置的验证和转换。
在这个时期,所有组件的 UIComponent.processValidators 方法将会被调用。如果验证和转换过程中出现错误,此生命周期将会结束并向客户端展示错误信息。
[b]更新数据模型[/b]
到这个时候,说明数据验证已经通过。
UIComponent 的值将会同步到模型对象,通常是后台 Bean。在这个时期,将会调用所有组件的 UIComponent.processUpdates 方法。设置模型对象的值有可能导致事件排队或触发。
[b]
调用应用[/b]
调用业务逻辑和进行页面导航处理。
所有注册到 UIComponent 上的监听器将会被调用。例如,所有的像 command button 或 hyperlink 这样拥有默认事件监听器的 action 组件,它们的事件监听器将会在这个时期被调用。
[b]
渲染响应[/b]
渲染响应到客户端。
在渲染响应之前,应用程序会自动调用 View 的 UIViewRoot.saveState 方法保存状态。
文章来源:[url]http://www.aptusource.org/2014/04/java-ee-7-request-processing-life-cycle-phases/[/url]