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