快速业务通道

JSF 1.2入门,第2部分 JSF生命周期、转换、检验和阶段监听器 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
t javax.faces.event.PhaseId; import javax.faces.event.PhaseListener; @SuppressWarnings("serial") public class DebugPhaseListener implements PhaseListener {    public void beforePhase(PhaseEvent phaseEvent) {      System.out.println("------ BEFORE PHASE " + phaseEvent.getPhaseId());    }    public void afterPhase(PhaseEvent phaseEvent) {      System.out.println("------ AFTER PHASE " + phaseEvent.getPhaseId());      if (phaseEvent.getPhaseId() == PhaseId.RENDER_RESPONSE) {        System.out.println("REQUEST END\n\n");      }    }    public PhaseId getPhaseId() {      return PhaseId.ANY_PHASE;    } }

PhaseListener 会在每个 JSF 阶段之前和之后通知您。用 getPhaseId 方法告诉 JSF 您对哪些阶段 感兴趣。PhaseId.ANY_PHASE 表示希望在每个阶段之前和之后都得到通知。DebugPhaseListener 输出阶 段事件名称,让您可以看到发生了什么情况。我在每个检验、转换和动作方法中添加了 System.out.println 语句。还在 firstName 属性的获取方法/设置方法中添加了 System.out.println 语句,让您可以看到系统什么时候访问它。

接下来,必须在 faces-config.xml 中注册阶段监听器,见清单 43:

清单 43. 在 faces-config.xml 中注册 DebugPhaseListener

<lifecycle>   <phase-listener>com.arcmind.phase.DebugPhaseListener</phase-listener> </lifecycle>

阶段监听器的输出

清单 44 给出第一次装载表单时的输出:

清单 44. 第一次装载表单时 DebugPhaseListener 的输出

------ BEFORE PHASE RESTORE_VIEW 1 ------ AFTER PHASE RESTORE_VIEW 1 ------ BEFORE PHASE RENDER_RESPONSE 6 ContactController.getContacts() ------ AFTER PHASE RENDER_RESPONSE 6 REQUEST END

根据 清单 42 中的代码,JSF 发现这个请求是对一个视图的初始请求,它使用 JSP 构建视图,然后 直接进入显示响应阶段。注意,在显示响应阶段,会调用控制器的 getContacts() 方法。

在单击 Add New 链接时,会看到清单 45 所示的输出:

清单 45. 调用 addNew() 方法之后 DebugPhaseListener 的输出

------ BEFORE PHASE RESTORE_VIEW 1 ------ AFTER PHASE RESTORE_VIEW 1 ------ BEFORE PHASE APPLY_REQUEST_VALUES 2 ------ AFTER PHASE APPLY_REQUEST_VALUES 2 ------ BEFORE PHASE PROCESS_VALIDATIONS 3 ------ AFTER PHASE PROCESS_VALIDATIONS 3 ------ BEFORE PHASE UPDATE_MODEL_VALUES 4 ------ AFTER PHASE UPDATE_MODEL_VALUES 4 ------ BEFORE PHASE INVOKE_APPLICATION 5 ContactController.addNew() ------ AFTER PHASE INVOKE_APPLICATION 5 ------ BEFORE PHASE RENDER_RESPONSE 6 Contact.getFirstName() ContactController.getGroups() ContactController.getGroups() ContactController.getAvailableTags() ContactController.getContacts() ------ AFTER PHASE RENDER_RESPONSE 6 REQUEST END

addNew() 方法会使表单显示出来。因为 addNew() 是一个 postback,所以 JSF 会经历所有阶段。因 为在调用 addNew() 方法之前不显示表单,所以在调用 addNew() 方法之前不处理它的字段。

接下来,输入无效的 ZIP 编码(比如 aaa)和无效的电话号码(比如 aaa)。然后选择两个标记和一 个组,并单击 Add 按钮。这时会看到清单 46 所示的输出:

清单 46. 输入无效 ZIP、无效电话号码、一个组和一些标记之后的输出

------ BEFORE PHASE RESTORE_VIEW 1 ------ AFTER PHASE RESTORE_VIEW 1 --

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号