快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
代码,这会大大简化控制器和视图。

清单 21 和清单 22 分别为 Group 和 Tag 转换器实现 Converter 接口:

清单 21. 实现 Converter 接口的 Group 转换器

package com.arcmind.contact.converter; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.convert.Converter; import javax.faces.convert.ConverterException; import javax.faces.application.FacesMessage; import com.arcmind.contact.model.Group; import com.arcmind.contact.model.GroupRepository; public class GroupConverter implements Converter {   ... }

清单 22. 实现 Converter 接口的 Tag 转换器

package com.arcmind.contact.converter; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.convert.Converter; import com.arcmind.contact.model.Tag; import com.arcmind.contact.model.TagRepository; public class TagConverter implements Converter {   ... }

实现 getAsObject() 方法

下一步是实现 getAsObject() 方法,这个方法将字段(字符串)转换为对象。清单 23 给出 GroupConverter 的 getAsObject() 方法:

清单 23. GroupConverter 的 getAsObject() 方法

... public class GroupConverter implements Converter {   public Object getAsObject(FacesContext facesContext, UIComponent component,      String value) {     GroupRepository repo = (GroupRepository) facesContext        .getExternalContext().getApplicationMap()        .get("groupRepository");     Long id = Long.valueOf(value);     if (id == -1L) {      throw new ConverterException(new FacesMessage(         FacesMessage.SEVERITY_ERROR, "required", "required"));     }     return repo.lookup(id);   }   ... }

注意,GroupConverter 查找 groupRepository 并使用 groupRepository 从存储库中读取 Group。还 要注意,它检查值是否是 -1L;如果是这样,就通过抛出一个新的 ConverterException 输出所需的消息 。

TagConverter 是相似的。它使用 tagRepository 查找标记值。清单 24 给出 TagConverter 的 getAsObject() 方法:

清单 24. TagConverter 的 getAsObject() 方法

... public class TagConverter implements Converter {   public Object getAsObject(FacesContext facesContext, UIComponent component,      String value) {     TagRepository repo = (TagRepository) facesContext        .getExternalContext().getApplicationMap()        .get("tagRepository");     return repo.lookup(Long.valueOf(value));   }   ... }

这两个转换器都没有进行全面的错误检查。如果存储库对象实际上与数据库或缓存服务器通信,那么 可能需要把 getAsObject() 包装在 try/catch 块中,并在数据库出现问题时生成一个严重性为 SEVERITY_FATAL 的 FacesMessage — 就像 清单 23 中的 GroupConverter 处理 -1L 的方法一样。

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

时间:2011-08-09 IBM Richard Hightower

实现 getAsString 方法

JSF 需要显示当前选择的值。这需要调用 Converter 的 getAsString 方法。清单 25 给出 GroupConverter 的 getAsString 方法:

清单 25. GroupConverter 的 getAsString 方法

... public class GroupConverter implements Converter {

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