快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
} else if (phoneComps.length == 1 && value.length() > 10){        phone.setCountryCode(value.substring(0,1));        phone.setAreaCode(value.substring(1,4));        phone.setPrefix(value.substring(4,7));        phone.setNumber(value.substring(7));            } else {        phone.setNumber(value);      }      return phone;    }    public String getAsString(FacesContext context, UIComponent component,        Object value) {      System.out.println("PhoneConverter.getAsString()");      return value.toString();    } }

与检验器不同,转换器的好处是可以在 faces-config.xml 中注册(见 清单 27),让转换器连接到 某个类。每当这个类出现在表达式语言(EL)值绑定中时,会自动使用这个转换器;不需要在 JSP 中添 加 <f:converter>。新的电话号码转换器会自动应用于 PhoneNumber,不需要在视图中指定转换器 。

原来的电话号码检验成了电话号码转换的一部分,您可能想知道电话号码检验器现在是什么样子。可 以通过编写一个检验器来回答这个问题,它证明电话号码属于亚利桑那州,见清单 41:

清单 41. 确保电话号码属于亚利桑那州

package com.arcmind.contact.validators; import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.validator.ValidatorException; import com.arcmind.contact.model.PhoneNumber; public class ContactValidators {    public void validatePhone(FacesContext context, UIComponent component,        Object value) throws ValidatorException {      System.out.println("ContactValidators.validatePhone()");      PhoneNumber phoneNumber = (PhoneNumber)value;      if (!phoneNumber.getAreaCode().equals("520")        && !phoneNumber.getAreaCode().equals("602")) {        FacesMessage message = new FacesMessage();        message.setDetail("Arizona residents only");        message.setSummary("Arizona residents only");        message.setSeverity(FacesMessage.SEVERITY_ERROR);        throw new ValidatorException(message);      }    } }

注意,与前面的检验器不同,这个电话号码检验器并不处理 String。在调用它之前,已经调用了转换 器。因此,值并不是 String,而是 PhoneNumber。

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

时间:2011-08-09 IBM Richard Hightower

处理阶段监听器

JSF API 文档(参见 参考资料)指出,PhaseListener 是 “一个接口,如果对象希望在请求处理生 命周期的每个标准阶段开始和结束时得到通知,就需要实现这个接口”(Sun Microsystems Inc.,2006 年)。我们已经编写了一些转换器、检验器和动作方法,在本节中就来编写一些阶段监听器。在 JSF 1.2 之前,PhaseListener 是以全局方式定义的。在 JSF 1.2 中,可以在视图级注册 PhaseListener 事件, 或者使用 <f:phaseListener binding="..." /> 标记。

实现阶段监听器

为了实现阶段监听器,需要实现 PhaseListener 接口,见清单 42:

清单 42. DebugPhaseListener

package com.arcmind.phase; import javax.faces.event.PhaseEvent; impor

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