您所在的位置: 首页 > 读书频道 > 设计开发 > Java系列 >

6.5.5 阶段事件示例

http://book.51cto.com  2008-09-25 10:42  麻地河 赵恒  机械工业出版社  我要评论(0)
  • 摘要:《JSF Web应用开发实战》详细介绍了UI组件、页面导航、托管Bean和统一表达式语言EL、事件驱动、转换器、验证器、消息以及数据库访问及持久化等内容。第六章前两节论述Java和JSF事件驱动模式的工作原理,后三节分别介绍了在JSF编程中非常重要的3种事件,即动作事件、值改变事件和阶段事件。本节说的是阶段事件示例。
  • 标签:JSF  Web  阶段  事件  监听器  接口    JSF Web应用开发实战

6.5.5 阶段事件示例

在本节及前面几节,我们介绍了JSF主要的3种事件,即动作事件、值改变事件和阶段事件。当JSF应用运行时,这三种事件都可能发生,有些事件发生在这个阶段,有些事件发生在另一个阶段,JSF应用正是通过事件的触发和响应,来实现各种各样的功能的。

我们已经知道,JSF将请求处理过程划分为若干个阶段,在每个阶段,阶段事件都会发生,那么,动作事件和值改变事件又发生在哪些阶段呢?这正是本例要回答的问题。

我们用一个简单的JSF页面来揭示JSF事件发生的先后顺序。在一个页面上,放置一个文本字段组件和一个按钮组件,分别触发值改变事件和动作事件,与阶段事件交织在一起。当任一事件发生时,我们在其事件处理方法中输出一行信息,通过观察这些信息,就可以知道事件发生的先后顺序。

在NetBeans中的操作步骤如下:

1. 新建一个“Web应用程序”项目,选择“Visual Web JavaServer Faces”为框架;

2. 设计Page1页面:

a) 放置一个文本字段组件,用来触发值改变事件。双击该组件,编辑其事件处理方法代码,使输出字符串“值改变事件”,如图 6 29所示;

 
(点击查看大图)图 6 29 值改变事件处理方法代码

b) 放置一个按钮组件,用来触发动作事件。双击该组件,编辑其事件处理方法代码,使输出字符串“动作事件”,如图 6 30所示。

 
图 6 30 动作事件处理方法代码

3. 设计阶段监听器:

a) 创建一个Java类MyListener,使实现PhaseListener接口;
b) 在MyListener的beforePhase()方法中,输出字符串“阶段”+阶段名称+“开始”;
c) 在MyListener的afterPhase()方法中,输出字符串“阶段”+阶段名称+“结束”。

MyListener类的代码如图 6 31所示。

 
(点击查看大图)图 6 31 阶段监听器MyListener的代码

4. 注册阶段监听器MyListener:

编辑JSF配置文件faces-config.xml,在其中加入MyListener的注册代码,如图 6 32的高亮部分所示。

 
(点击查看大图)图 6 32 在faces-config.xml中注册阶段监听器MyListener

运行程序,当Page1页面被呈现时,可以观察到一些输出。暂时忽略这些输出,我们感兴趣的是,在文本框中输入一些字符再点击按钮后,被触发的值改变事件、动作事件和阶段事件是如何交织在一起的。下面是从输出窗口拷贝下来的输出信息:

阶段RESTORE_VIEW 1开始
阶段RESTORE_VIEW 1完成
阶段APPLY_REQUEST_VALUES 2开始
阶段APPLY_REQUEST_VALUES 2完成
阶段PROCESS_VALIDATIONS 3开始
值改变事件
阶段PROCESS_VALIDATIONS 3完成
阶段UPDATE_MODEL_VALUES 4开始
阶段UPDATE_MODEL_VALUES 4完成
阶段INVOKE_APPLICATION 5开始
动作事件
阶段INVOKE_APPLICATION 5完成
阶段RENDER_RESPONSE 6开始
阶段RENDER_RESPONSE 6完成

从这段输出信息可以看出,典型情况下:

JSF的请求处理要经历6个阶段,这6个阶段依次是:

1. Restore View阶段,即“恢复视图”阶段;
2. Apply Request Value阶段,即“应用请求值”阶段;
3. Process Validation阶段,即“验证数据”阶段;
4. Update Model Value阶段,即“更新模型值”阶段;
5. Invoke Application阶段,即“调用应用”阶段;
6. Render Response阶段,即“呈现响应”阶段。

值改变事件发生在第3个阶段,早于动作事件;

动作事件发生在第5个阶段,晚于值改变事件。

图 6 33示出了JSF的请求处理阶段和各种事件的关系。图中,从左到右的6个椭圆代表请求处理过程及其行进方向,虚线代表事件的触发,小圆点指示触发事件的时间,而箭头所指则是被触发事件的类型。

 
(点击查看大图)图 6 33 JSF请求处理阶段和各种事件的关系

提示:随本书发行的光盘中含有本范例源代码,目录名称为eventdriven8。具体使用方法请参阅《第12章 使用源代码光盘》。

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   
企业级Web2.0 你准备好了么?
WebSphere 实现SOA的利器
浏览器的战国时代
Web安全云时代
调查:十大发现 解秘技术人
 
 验证码: (点击刷新验证码)   匿名发表
  • C#图解教程

  • 作者:苏林,朱晔
  • 本书是一本广受赞誉的C#教程。它以图文并茂的形式,用朴实简洁的文字,并辅之以大量表格和代码示例,精炼而全面地阐述了最新版C..
Copyright©2005-2008 51CTO.COM 版权所有