快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
ception) {        addErrorMessage(contactValidationException.getLocalizedMessage());        return null;      }         /* Turn form off, turn link on. */     form.setRendered(false);     addNewCommand.setRendered(true);         /* Add a status message. */     if (contactRepository.persist(contact) == null) {      addStatusMessage("Added " + contact);     } else {      addStatusMessage("Updated " + contact);     }     return "contactPersisted";   }           private void addErrorMessage(String message) {      FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(          FacesMessage.SEVERITY_ERROR, message, null));    }

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

时间:2011-08-09 IBM Richard Hightower

在清单 31 中,persist() 方法调用 contact 对象上的 validate() 方法。它捕获任何异常并把异常 错误消息转换为 FacesMessage。如果发生异常,它会返回 null,其含义为:留在当前视图上,不要导航 到下一个视图。

实际的检验代码包含在模型中 — 即,Contact 类的 validate() 方法,见清单 32。这一点很重要: 在为联系人添加更多的检验代码时,不需要修改控制器或视图层。

清单 32. 检验代码在模型中,而不在控制器中

... public class Contact implements Serializable {   ...           public void validate() throws ContactValidationException {     if (      (homePhoneNumber == null || "".equals(homePhoneNumber)) &&      (workPhoneNumber == null || "".equals(workPhoneNumber)) &&      (mobilePhoneNumber == null || "".equals(mobilePhoneNumber))           ) {      throw new ContactValidationException("At least one phone number" +         "must be set");    } }

应用程序级检验很简单,也很容易使用。它的优点是:

容易实现

不需要单独的类(定制检验器)

页面作者不需要指定检验器

应用程序级检验的缺点是,它在其他形式的检验(标准、定制和组件)之后执行,而且错误消息只在 执行其他形式的检验之后显示。

最后,应用程序级检验应该只用于需要业务逻辑检验的场合。

后端 bean 中的定制检验器

对于标准 JSF 检验器不支持的数据类型(包括电子邮件地址和 ZIP 编码),需要构建自己的检验组 件。如果希望对显示给最终用户的检验消息进行显式地控制,也需要构建自己的检验器。通过使用 JSF, 可以创建可插入的检验组件,可以在整个 Web 应用程序中重用这些组件。

如果不想创建单独的检验器类,也可以在后端 bean 方法中实现定制的检验。这种方式对于应用程序 开发人员更合适。例如,可以在托管 bean 中编写一个方法来检验电话号码,见清单 33:

清单 33. 电话号码检验

public class ContactValidators {    private static Pattern phoneMask;    static {      String countryCode = "^[0-9]{1,2}";      String areaCode = "(|-|\\(){1,2}[0-9]{3}(|-|\\)){1,2}";      String prefix = "(|-)?[0-9]{3}";      String number = "(|-)[0-9]{4}contentquot;;      phoneMask = Pattern.compile(countryCode + areaCode + prefix + number);    }    public void val

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