日期:2014-05-16 浏览次数:20392 次
?
当点 击 超 链 接或者表 单 按 钮 , JSF 请 求被 创 建, JSF 实现 框架开始 Restore View 阶 段。 这 个 阶 段中, JSF 实现 框架 为页面 打造 视图 ,在 视图 中 组 装事件 处 理器和校 验 器,保存 这 个 视图 到 FacesContext 实 例之中。 FacesContext 实 例包含所有的需要被 单 个 请 求 处 理的信息。所有的 组 件 标签 ,事件 处 理器, 转换 器和校 验 器都可以 访问这 个 实 例。
?
如果是提交 请 求,于 这 个 请 求相 对应的视图早已经存在,在这个阶段, JSF实现框架通过使用已保存在客户端或者服务器端的状态信息来恢复这个视图。
在恢复组件数之后,组件树中的每个组件从请求参数中使用它的 decode方法,解析出该组件的新值,然后,这些新值被存储到相应的组件之中。如果转换失败,会生成一个错误信息,和这个组件关联上,放到 FacesContext的错误消息队列之中。这个错误消息将会在 Render View Phase这个阶段中显示, Validation? Processing Phase产生的校验错误也采用如此方式。
如果没有任何 decode 方法或者事件 监 听 调 用 renderResponse 于当前的 FacesContext 实 例, JSF 实现 框架跳 过 Render Response 阶 段。
这 个 阶 段中,如果一个事件被安排到 队 列中, JSF 实现 框架广播 这 个事件 给对 此事件感 兴 趣的 监 听器。
在 这 个 阶 段中,如果 页 面上的一些 组 件有 immediate 属性被 设 置 为 true ,那么校 验 器, 转换 器和 这 个 组 件上的事件会被立即 处 理。
这时,如果 WEB应用需要重定向到一个不同的 WEB应用或者 Non-Faces Response组件,需要调用 FacesContex.responseComplete.
这个阶段的末尾,设置组件的新值,消息和事件被放到队列之中。
在这个阶段, JSF实现框架处理组件树中所有已经注册于组件之上的校验器,用指定的规则检验组件的属性值。如果组件的属性值无效, JSF实现框架向 FacesContext实例中添加一条错误消息,然后直接跳向 Render Response Phase阶段,附带着错误消息,页面再此被渲染,如果有在 Apply Request Values Phase阶段产生的转换错误,这类消息也在当前这个阶段显示于页面之上。
任何 validate方法或者事件监听器调用了当前 FacesContext的 renderResponse方法, JSF实现框架跳至 Render Response Phase阶段。
这个时候,如果应用需要跳转至
Non-Faces Response组件、页面或者其他应用,可以调用
FacesContex.responseComplete方法。如果事件已经被放入队列,
JSF