快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
。但是,可以进一步改进定制检验器的实现:创建 一个使用这个检验器的定制标记,使它看起来像内置的检验。对于需要经常检验的数据,比如电子邮件地 址,这种方法可以简化代码,尽可能增加代码重用和提高应用程序行为的一致性。

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

时间:2011-08-09 IBM Richard Hightower

再论检验和转换

在到达检验阶段之前,转换已经执行过了。例如,如果有一个 int 属性绑定到 inputText 字段,那 么先对这个字段进行转换,然后再进行检验。

假设您有一个 PhoneNumber 值对象,并使用它(而不是使用 String)在 Contact 中存储电话号码。 那么 清单 33 中电话号码的检验规则就没什么意义了。实际上,这个检验规则只证明 String 采用了电 话号码的格式。这个逻辑实际上应该放在转换器中,见清单 40:

清单 40. 再论检验和转换:PhoneConverter

package com.arcmind.contact.converter; import java.util.regex.Pattern; import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.convert.Converter; import javax.faces.convert.ConverterException; import com.arcmind.contact.model.PhoneNumber; /** * @author Richard Hightower * */ public class PhoneConverter implements Converter {    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 Object getAsObject(FacesContext context, UIComponent component,        String value) {      System.out.println("PhoneConverter.getAsObject()");      if (value.isEmpty()) {        return null;      }      /* Before we parse, let''s see if it really is a phone number. */      if (!phoneMask.matcher(value).matches()) {        FacesMessage message = new FacesMessage();        message.setDetail("Phone number not valid");        message.setSummary("Phone number not valid");        message.setSeverity(FacesMessage.SEVERITY_ERROR);        throw new ConverterException(message);      }      /* Now let''s parse the string and populate a phone number object. */      PhoneNumber phone = new PhoneNumber();      phone.setOriginal(value);      String[] phoneComps = value.split("[ ,()-]");      String countryCode = phoneComps[0];      phone.setCountryCode(countryCode);      if ("1".equals(countryCode) && phoneComps.length == 4) {        phone.setAreaCode(phoneComps[1]);        phone.setPrefix(phoneComps[2]);        phone.setNumber(phoneComps[3]);      } else if ("1".equals(countryCode) && phoneComps.length != 4) {        throw new ConverterException(new FacesMessage(            "No Soup for you butter fingers!"));     

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