JSF 页面生命周期管理 (一)


JSF 面的生命周期 似于 JSP 面。当客 为页 创见 一个 HTTP ,服 器端响 应这个页面并翻译 HTML 。因 JSF 提供了 外功能,因此,生命周期提供了一些 外的服 面。


员,除了 需要知道 生命周期过程中中,比如什么时候对进行数据校验、数据转换和事件发生时刻这些外,还可能需要知道这些能做什么;如何改变这些的处理方式和时间。


一个树形的 UI组件描述一个 JSF页面,叫视图。当客户端为这个页面创造一个请求,生命周期开始,在整个生命周期中,考虑到页面当前视图状态从前一个子阶段保存而来, JSF的实现框架( MyFaces OpenFaces Glassfish等)必须创建这个视图。当客户端提交一个页面, JSF实现框架必须执行几个任务,比如校验当前视图中输入的数据,然后转换这些数据为服务端所需要的数据类型。 JSF实现框架执行所有这些任务——生命周期中一系列的步骤。


哪一个步骤需被执行取决于请求是否出之于 JSF应用和响应是否生成于 JSF生命周期的渲染阶段。

JSF应用支持两种响应和两种请求类型:

1.     Faces Response, 一种 Servlet响应,创建于 Render Response Phase阶段

2.     Non-Faces Response, 一种 Servlet响应,不在 Render Response Phase阶段创建的,比如一个 JSP页没有包含任何的 JSF组件。

3.     Faces Request, 一种 Servlet请求,由前一个已生成的 Faces响应发送。比如一个表单是从一个 JSF UI组件发送,并且请求的 URI指示应用 JSF的组件树去处理这个请求。

4.     Non-Faces Request, 一种 Servlet请求发送到一个应用组件,比如 JSP或者 Servlet,而不是直接发送到 JSF的 组件上。

 

为这 些不同 型的 求和响 致三种可能的生命周期 合存在于 JSF 用之中:

1.     Non-Faces Request Faces Response

比如,点击 HTML页面上的超链接,打开一个 JSF页面,从一个 Non-Faces Request渲染 Faces Response JSF应用必须提供 FacesServer对应关系,来接受传入请求并且传递这些请求到生命周期实现中去处理,表明生命周期处理 Servlet描述怎么样去提供一个对应关系给 FacesServlet。在生成一个 Faces Response时, JSF应用必须创建一个新视图,保存 FacesContext对象,以期获得视图必须要的对象引用—— FacesContext.renderResponse, 它立即跳过 Render Response Phase,强制渲染视图。

 

2.     Faces Request Non-Faces Response

有时, JSF应用重定向至不同的 WEB应用或者重定向至不包含任何 JSF组件的 JSP Servlet,这种情况下,开发人员必须通过调用 FacesContext.responseComplete来跳过 Render Response Phase这个阶段。 FacesContext对象包含了一个特定 Faces  Request的所有的信息,这个方法还可以在 Apply Request Values Phase, Process Validation Phase Update Model Values Phase这三个阶段被调用。

3.     Faces Request Faces Response

JSF 生命周期中最常 合,它也是 标准请求处理描述下一个阶段的处理方式。这个场合里,包含了 JSF组件利用 FacesServlet提交一个请求到 JSF应用。因为请求已经被处理,无须额外的步骤去生成响应,在相关的阶段,所有的监听器,校验器和转换器会自动地被调用。

 

理生命周期

理生命周期代表第三种 合。多数 JSF 不要抱怨生命周器 理方式。确 JSF 丰富去 执行页面处理过程,所以开发人员不用去面对象组件的状态改变这类复杂的渲染问题。比如,选择一个 checkbox会影响到页面上其他组件的外观行为。 JSF会正确地处理这些事件,并且不会让页面渲染而不反映出这个变化。

JSF生命周期 来至Java官网

 

来,生命周期有两种 求,初始 求和提交 求。用 第一 ,会建立一个初始 求, 请求的页面会被服务器端装载,并转换成 HTML,响应给浏览器,当用户在这个页面上提交表单时, JSF处理提交请求。生命周期处理初始请求时,只执行 Restore View Render Response两个阶段因为这个请求中用户没有输入数据,相反地,生命周期处理提交请求时,会执行所有的阶段。


tobe continue

猜你喜欢

转载自mojarra.iteye.com/blog/1344930
jsf