快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
= edit;    } }

JSF 1.2入门,第2部分 JSF生命周期、转换、检验和阶段监听器(20)

时间:2011-08-09 IBM Richard Hightower

注意,PhaseListener 只监听 UPDATE_MODEL_VALUES。它然后调用 validate() 方法。这个方法检查 form 对象是否存在以及是否是验证器的一个实例,然后在领域对象上调用 validate(),这会让模型执行 检验。还要注意,如果模型检验失败,AbstractCrudCOntroller 的 validate() 方法会调用 FacesContext.getCurrentInstance().renderResponse(),这会使 JSF 跳过 INVOKE_APPLICATION 阶段 。

现在,将 ContactController 改为 AbstractCrudController 的子类,见清单 51:

清单 51. ContactController 扩展 AbstractCrudController,从而提供 PhaseListener 检验支持

public class ContactController extends AbstractCrudController{   ...   public void addNew() {     ... same as before except sets the edit mode.     super.setEdit(true);   }   public void persist() {     ... same as before except sets the edit mode.     super.setEdit(false);   }   public void read() {     ... same as before except sets the edit mode.     super.setEdit(true);   }    @Override    Object getFormObject() {      if (super.isEdit()) {        return this.contact;      } else {        return null;      }    } }

注意,清单 51 实现 AbstractCrudController 中的抽象方法 getFormObject。它使用编辑模式,所 以只有当控制器处于编辑模式时,它才会返回联系人对象。控制器按照这种方式判断什么时候应该检验对 象。

最后,需要注册您的阶段监听器,见清单 52:

清单 52. 绑定到 phaseListener 属性

<f:view>   <h3>Contacts (4th version)</h3>   <f:phaseListener binding="#{contactController.phaseListener}" />

可以使用阶段监听器改变 JSF 处理请求的方式,因此可以根据自己的需要扩展 JSF 框架。

结束语

本教程讨论了 JSF 的请求处理生命周期,并演示了组件模型的一些基本特性。本教程用大量篇幅讨论 了 JSF 转换和检验。实际上,本教程已经涵盖了在应用程序中进行转换和检验时所需了解的大部分知识 (至少对于这个 JSF 版本差不多了)!当然,本教程不可能覆盖所有内容。例如,对于 JSF 没有提供或 此处未讨论的检验器组件,您可能希望利用 Tomahawk、Crank、Shale 和 jsf-comp(参见 参考资料)。 另外,尽管本教程讨论了最常用的转换和检验技术,但是还有其他一些技术未涉及到。

要记住,转换和检验不一定能够很好地配合。转换器把字符串转换为对象,而大多数标准检验器都处 理字符串。因此,在同时使用定制转换器和检验器时,必须小心。例如,本教程中的 PhoneNumber 对象 不能使用长度检验器。在这种情况下,要么也编写一个定制检验器,要么将所有特殊的检验逻辑包含在定 制转换器中。我喜欢后一种方式,因为只需把一个定制转换器(包含内置的检验逻辑)与某一对象类型关 联起来,然后让 JSF 处理这个对象类型。JSF 会自动执行转换和检验,而不需要在 JSP 中指定任何转换 器 id。(当然,有人会认为这种编程方式是偷懒,而且它不一定适合所有情况。)

JSF 为 Web 应用程序开发提供了一种灵活、强大且可插入的框架。除了标准的转换器和检验器之外, JSF 还允许应用程序和框架开发人员以自己喜欢的方式对实现进行定制。最后,选用哪种转换和检验策略 由您自己决定。通过使用 JSF,在原型设计阶段,可以轻松快速地建立原型(使用标准转换器、检验器、 内联检验);在以

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号