快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
HtmlSelectOneMenu 和 HtmlSelectOneRadio。

联系人应用程序(第二版)使用 <h:selectOneMenu>。为此,需要添加三个新的模型对象: Group(见 清单 7)、Tag 和 ContactType。还要添加两个新的存储库对象:GroupRepository 和 TagRepository,它们与 ContactRepository 相似。ContactType 不需要存储库,因为它是一个 Enum。 Contact 类现在有三个新属性:它所属的组(group)、与它相关联的标记(tags)和它的类型(type) 。

清单 7. 子视图 contacts.jsp/form.jsp

<%-- Group --%> <h:outputLabel value="Group" for="group" accesskey="g" /> <h:selectOneMenu id="group" validatorMessage="required"   value="#{contactController.selectedGroupId}">   <f:selectItems value="#{contactController.groups}" />   <f:validateLongRange minimum="1" /> </h:selectOneMenu> <h:message for="group" errorClass="errorClass" />

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

时间:2011-08-09 IBM Richard Hightower

注意,selectOneMenu 使用 value 属性将 selectOneMenu 绑定到 selectedGroupId。selectOneMenu 元素体中包含一个 <f:selectItems>,它的值绑定到 groups 属性:value=# {contactController.groups}。在后端 bean 中创建组列表。selectedGroupId 属性和 groups 属性的代 码见清单 8:

清单 8. 构建组列表

public class ContactController {   ...   private GroupRepository groupRepository;   ...   private Long selectedGroupId;   ...   public List<SelectItem> getGroups() {     List<Group> groups = groupRepository.list();     List<SelectItem> list = new ArrayList<SelectItem>(groups.size() +1);     list.add(new SelectItem(Long.valueOf(-1L), "select one"));     for (Group group : groups) {      SelectItem selectItem = new SelectItem(group.getId(), group.getName());      list.add(selectItem);     }     return list;   }   //Other getter/setters removed   ...

groups 属性返回 SelectItem 的列表。SelectItem 类用来表示列表中的一个列表项。UISelectMany 和 UISelectOne 组件都使用这个类。注意,getGroups 方法使用 groupRepository 获得组列表,这是一 个像 contactRepository 那样注入的存储库对象。groupRepository 管理 Group 领域对象。一个 Group 代表一个组,一个 Contact 代表一个联系人。getGroups() 创建一个 SelectItem 列表,使用 group.id 属性作为值,使用 group.name 属性作为标签。

注意,这里要添加一个值为 -1 的 “select one” SelectItem。使用这个值来判断是否已经选择了 列表项。通过在 selectOneMenu 中使用 <f:validateLongRange minimum="1" />,判断出未选择 列表项的情况(见 清单 7)。还要注意,selectOneMenu 使用 validatorMessage="required" 显示一个 简短的错误消息。

注意,清单 8 直接调用存储库。如果存储库实际上与一个数据库或缓存通信,那么为了进行错误处理 并在属性中公开所选择的列表项,需要在动作方法中进行调用。

在提交表单时,设置 selectedGroupId。绑定到更新按钮和创建按钮的 persist() 使用 selectedGroupId 在存储库中查找这个组,见清单 9:

清单 9. 更新 persist() 以使用 selectedGroupI

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