`
2277259257
  • 浏览: 519929 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ZK----ZK 多个下拉菜单动态级联绑定对象

 
阅读更多

ZK学习博客http://minjiechenjava.iteye.com/category/110729

 

//前台页面的zul文件

=======================================================================================

userxml
<?xml version="1.0" encoding="utf-8"?>
<?page id="userPage"?>
<?xel-method prefix="c" name="hasPermission"
class="com.linktel.linkFax.web.zk.util.AuthorityTools"
signature="com.linktel.linkFax.web.zk.util.AuthorityTools  hasPermission(java.lang.String)"?>
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" root="./userWin"?>
<window id="userWin" width="100%"
 use="com.linktel.linkFax.web.zk.controller.UserController" xmlns:h="http://www.w3.org/1999/xhtml"
 xmlns:n="http://www.zkoss.org/2005/zk/native" xmlns="http://www.zkoss.org/2005/zul"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd">
       <listbox id="userLbx"    model="@{userWin.userList}"
                    selectedItem="@{userWin.user}"  onSelect="showUserEdit();"
                    fixedLayout="true"  paginal="@{pagingUser}" >    
           <listhead>
                <listheader label="用户名" align="center"></listheader>
                <listheader label="手机号" align="center"></listheader>
                <listheader label="分机号" align="center"></listheader>
                <listheader label="职位" align="center"></listheader>
                <listheader label="传真" align="center"></listheader>
                <listheader label="启用状态" align="center"></listheader>
            </listhead>
            <listitem self="@{each=user}">
                <listcell label="@{user.username}"></listcell>
                <listcell label="@{user.phone}"></listcell>
                <listcell label="@{user.exten}"></listcell>
                <listcell label="@{user.position}"></listcell>
                <listcell label="@{user.fax}"></listcell>
                <listcell label="@{user.enabled,converter='com.linktel.linkFax.web.zk.converter.DataConverter'}"></listcell>
             </listitem>
        </listbox>
        <paging id="pagingUser" pageSize="3"></paging>
        <label value="公司名称:"></label>
        <combobox id="cbxCom" model="@{userWin.companyList}">
                       <comboitem self="@{each=companyEdit}" 
                                           label="@{companyEdit.name}"
                                           value="@{companyEdit.id}">
                       </comboitem>
         </combobox>
         <label value="部门名称:"></label>
         <combobox id="cbxDep" model="@{userWin.deptList}"
                                                 selectedItem="@{userWin.deptEdit}">
                      <comboitem self="@{each=deptEdit}"
                                           label="@{deptEdit.name}"
                                           value="@{deptEdit.id}">
                     </comboitem>
          </combobox>
</window>

=======================================================================================

Java代码 复制代码 收藏代码
  1. //后台绑定Controller类 下面有详细的注释
  2. publicclass UserController extends Window implements AfterCompose {
  3. protected AnnotateDataBinder binder;
  4. private User user = new User();
  5. private User u = new User();
  6. private Chinaregion province = new Chinaregion();
  7. private Chinaregion city = new Chinaregion();
  8. private Chinaregion district = new Chinaregion();
  9. private Role role = new Role();
  10. private Company company = new Company();
  11. protected Dept dept = new Dept();
  12. private Company companyEdit = new Company();
  13. private Dept deptEdit = new Dept();
  14. private Combobox cbxCompany;
  15. protected Listbox userLbx;
  16. protected Paging pagingUser;
  17. protected Combobox cbxProvince;
  18. protected Combobox cbxCity;
  19. protected Combobox cbxDistrict;
  20. private Combobox cbxDept;
  21. private Combobox cbxCom;
  22. private Combobox cbxDep;
  23. private List<Company> companyList;
  24. private List<User> userList;
  25. private List<Dept> deptList;
  26. private List<Role> roleList;
  27. private List<Chinaregion> provinceList;
  28. private List<Chinaregion> cityList;
  29. private List<Chinaregion> districtList;
  30. public Dept getDeptEdit() {
  31. return deptEdit;
  32. }
  33. publicvoid setDeptEdit(Dept deptEdit) {
  34. this.deptEdit = deptEdit;
  35. }
  36. public Dept getDept() {
  37. return dept;
  38. }
  39. public Chinaregion getDistrict() {
  40. return district;
  41. }
  42. publicvoid setDistrict(Chinaregion district) {
  43. this.district = district;
  44. }
  45. public Chinaregion getProvince() {
  46. return province;
  47. }
  48. public Chinaregion getCity() {
  49. return city;
  50. }
  51. publicvoid setCity(Chinaregion city) {
  52. this.city = city;
  53. }
  54. publicvoid setProvince(Chinaregion province) {
  55. this.province = province;
  56. }
  57. public Role getRole() {
  58. return role;
  59. }
  60. publicvoid setRole(Role role) {
  61. this.role = role;
  62. }
  63. publicvoid setDept(Dept dept) {
  64. this.dept = dept;
  65. }
  66. public List<Chinaregion> getProvinceList() {
  67. return provinceList;
  68. }
  69. publicvoid setProvinceList(List<Chinaregion> provinceList) {
  70. this.provinceList = provinceList;
  71. }
  72. public List<Chinaregion> getCityList() {
  73. return cityList;
  74. }
  75. publicvoid setCityList(List<Chinaregion> cityList) {
  76. this.cityList = cityList;
  77. }
  78. public List<Chinaregion> getDistrictList() {
  79. return districtList;
  80. }
  81. publicvoid setDistrictList(List<Chinaregion> districtList) {
  82. this.districtList = districtList;
  83. }
  84. public List<Role> getRoleList() {
  85. return roleList;
  86. }
  87. publicvoid setRoleList(List<Role> roleList) {
  88. this.roleList = roleList;
  89. }
  90. public Company getCompany() {
  91. return company;
  92. }
  93. publicvoid setCompany(Company company) {
  94. this.company = company;
  95. }
  96. public User getU() {
  97. return u;
  98. }
  99. publicvoid setU(User u) {
  100. this.u = u;
  101. }
  102. public List<Dept> getDeptList() {
  103. return deptList;
  104. }
  105. publicvoid setDeptList(List<Dept> deptList) {
  106. }
  107. public List<Company> getCompanyList() {
  108. return companyList;
  109. }
  110. publicvoid setCompanyList(List<Company> companyList) {
  111. this.companyList = companyList;
  112. }
  113. public User getUser() {
  114. return user;
  115. }
  116. public List<User> getUserList() {
  117. return userList;
  118. }
  119. publicvoid setUserList(List<User> userList) {
  120. this.userList = userList;
  121. }
  122. publicvoid setUser(User user) {
  123. this.user = user;
  124. }
  125. public Company getCompanyEdit() {
  126. return companyEdit;
  127. }
  128. publicvoid setCompanyEdit(Company companyEdit) {
  129. this.companyEdit = companyEdit;
  130. }
  131. /**
  132. * 组件创建时初始化的事件监听器
  133. */
  134. publicvoid init() {
  135. // UserService service= (UserService) SpringUtil.getBean("userService");
  136. // int count =service.countUser();
  137. // pagingUser.setTotalSize(count);
  138. pagingUser.addEventListener(ZulEvents.ON_PAGING,
  139. new UserPagingEventListener());
  140. userLbx.addEventListener(Events.ON_SELECT,
  141. new UserSelectedEventListener());
  142. cbxProvince.addEventListener(Events.ON_SELECT,
  143. new ProvinceSelectedEventListener());
  144. cbxCity.addEventListener(Events.ON_SELECT,
  145. new CitySelectedEventListener());
  146. cbxCom.addEventListener(Events.ON_SELECT,
  147. new EditCompanySelectedEventListener());
  148. if (judgeCompontent(cbxCompany)) {
  149. cbxCompany.addEventListener(Events.ON_SELECT,
  150. new CompanySelectedEventListener());
  151. }
  152. }
  153. /**
  154. * 初始化所属公司下的部门列表
  155. *
  156. * @param company
  157. */
  158. publicvoid initDept(Company company) {
  159. DeptService service = (DeptService) SpringUtil.getBean("deptService");
  160. deptList = service.getDeptsByCoId(company);
  161. binder.loadComponent(cbxDep);
  162. }
  163. /**
  164. * 初始化公司列表
  165. */
  166. publicvoid initCompany() {
  167. CompanyService service = (CompanyService) SpringUtil .getBean("companyService");
  168. companyList = service.getCompanyAll();
  169. }
  1. /**
  2. * 动态绑定变量值
  3. */
  4. @Override
  5. publicvoid afterCompose() {
  6. Components.wireVariables(this, this);
  7. Components.addForwards(this, this);
  8. initiaData();
  9. }

 

  1. class UserSelectedEventListener implements EventListener {
  2. @SuppressWarnings("unchecked")
  3. publicvoid onEvent(Event event) throws Exception {
  4. String cId = user.getCoid();
  5. // 获取Combobox组件中的Comboitem所有的子项集合
  6. List<Comboitem> comsItems = cbxCom.getChildren();
  7. // 使用List接口的迭代器,迭代每个Comboitem对象
  8. Iterator<Comboitem> comsIt = comsItems.iterator();
  9. // 是否有下个对象
  10. while (comsIt.hasNext()) {
  11. // 迭代对象转换成Comboitem对象
  12. Comboitem item = comsIt.next();
  13. // 判断item中的值是否相等,如果相等
  14. if (StringUtils.equals((String) item.getValue(), cId)) {
  15. // 如果相等 绑定并且选中该对象
  16. cbxCom.setSelectedItemApi(item);
  17. // 把该事件放入时间列队的末尾,在所有事件都处理完 之后,将会立即处理该事件
  18. Events.postEvent(Events.ON_SELECT, cbxCom, null);
  19. // 初始化部门对象
  20. Company c = new Company();
  21. c.setId(cId);
  22. initDept(c);
  23. break;
  24. }
  25. }
  26. }
  27. }

 

  1. class EditCompanySelectedEventListener implements EventListener {
  2. publicvoid onEvent(Event event) throws Exception {
  3. if (deptList == null || deptList.isEmpty())
  4. return;
  5. // 循环迭代Dept集合对象
  6. for (Iterator<Dept> it = deptList.iterator(); it.hasNext();) {
  7. Dept each = it.next();
  8. if (StringUtils.equals(user.getDeptid(), each.getId())) {
  9. deptEdit = each;// 赋值给cbxDep绑定的对象;
  10. // 重新绑定对象
  11. binder.loadComponent(cbxDep);
  12. return;
  13. }
  14. }
  15. }
  16. }
分享到:
评论

相关推荐

    级联菜单 动态级联菜单

    级联菜单是一种常见的Web应用程序用户界面元素,它允许用户从多个选项中选择一个或多个项目。动态级联菜单是指可以根据实际情况动态生成选项的级联菜单。下面将对该技术进行详细的解释。 级联菜单的原理 级联菜单...

    级联菜单 级联菜单级联菜单级联菜单

    级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单级联菜单...

    java web下开发二级级联下拉菜单(数据库实现的)

    这个场景中,我们利用数据库存储数据,并通过后端处理逻辑动态生成这些下拉菜单。下面将详细介绍如何使用MySQL数据库来实现这一功能。 首先,我们需要创建一个数据库表来存储级联菜单的数据。假设我们有一个名为`...

    级联下拉菜单

    通过这种方式,我们可以创建出一个动态的、响应式的级联下拉菜单,用户在选择一个选项后,无需刷新页面,第二个下拉菜单就能自动更新为与之关联的选项。这种交互方式提高了用户体验,同时也减轻了服务器的压力。在...

    JQuery写的日期级联下拉菜单

    这里我们讨论的“JQuery写的日期级联下拉菜单”是一个利用jQuery库实现的交互式用户界面组件,允许用户通过三个连续的下拉列表分别选择年、月和日。这种设计使得用户能够快速、准确地输入日期,同时保持页面的简洁性...

    javascript四级级联下拉菜单

    JavaScript四级级联下拉菜单是一种常见的网页交互设计,它允许用户在多个下拉菜单中进行选择,逐级筛选出最终的选项。这种设计通常用于表示层次结构的数据,如国家、省份、城市和区域等地理信息,也可以应用于其他...

    安卓--级联下拉列表实现DEMO

    综上所述,这个"安卓--级联下拉列表实现DEMO"涵盖了Android开发中Spinner的使用、事件监听、数据处理和UI设计等多个方面。通过学习和分析这个DEMO,开发者可以更好地理解和掌握如何在实际项目中实现级联下拉列表的...

    select2 省市区 级联 下拉菜单

    5. **级联事件处理**:在`onChange`事件中,我们根据用户选择的省份动态填充市的下拉菜单。同理,当市被选中时,填充区的下拉菜单。这一步需要递归地遍历数据结构,找到对应级别的子项。 6. **禁用未激活的下拉**:...

    《使用面向对象的方式封装js级联下拉菜单列表的实例教程》源码

    本文件属于文章《使用面向对象的方式封装js级联下拉菜单列表的实例教程》的完整代码,在读完原创文章之后可以下载查看代码。代码中cascadeMenu.js文件封装了级联菜单插件,可直接引入到html文件中使用。

    最新版Jquery网站导航级联菜单

    网上找了很久这种菜单,浪费了很多时间,实在没办法,只好老老实实去官网上按说明弄了一个,并更新了,jquery1.5.2, 希望给有需要的朋友可以节约一点时间,欢迎交流,qq:170262

    layui-级联下拉框-可配置开启多选-HTML源码

    级联下拉框是一种常见的UI组件,它允许用户在一个下拉框的选择基础上动态加载并显示另一个相关的下拉框,这种联动效果在数据筛选、地区选择等场景中非常常见。 1. HTML基础: HTML(HyperText Markup Language)...

    js加html编写的级联菜单

    级联菜单(Cascading Menu)是Web开发中常见的交互元素,主要用于呈现具有层次结构的数据。在本案例中,我们讨论的是使用JavaScript和HTML技术实现的级联菜单,且该菜单能够与数据库进行交互,动态地从数据库中读取...

    js下拉级联例子

    在JavaScript中,下拉级联(Cascading Dropdown)是一种常见的前端交互设计,它用于创建一组相关联的下拉菜单,其中一个下拉菜单的选择会影响另一个下拉菜单的选项。这样的设计常见于数据筛选、地区选择等场景,可以...

    JSP+JavaScript二级级联下拉菜单

    在使用JSP JavaScript过程中有很多的技巧与实现,那么如何构建二级级联下拉菜单呢,本文将会向你做一个源码上的介绍。

    js级联菜单实现全国省市下拉菜单

    下面将详细介绍如何使用JavaScript实现全国省市的二级级联下拉菜单。 首先,我们需要一个HTML结构来承载我们的菜单。在这个例子中,我们有两个`&lt;select&gt;`元素,分别代表省份和城市。省份的选项会触发城市选项的更新...

    安卓SlidingMenu各种菜单侧滑菜单相关-级联菜单两级菜单自定义实现提供多种方式PopWindowFragment引用..rar

    此资源中的`CascadingMenuViewLib.rar`可能包含了一个自定义的级联菜单库,开发者可以通过这个库快速集成级联菜单到自己的应用中。 其次,两级菜单是指菜单中有两个层次的选项,用户先选择一级菜单,然后二级菜单才...

    select级联下拉列表

    级联意味着一个下拉菜单的选择会影响另一个下拉菜单的选项。例如,在省市区联动中,当用户选择一个省份时,相应的城市下拉菜单会自动更新,仅显示该省内的城市,而不再显示所有城市的列表。这种用户体验可以提高页面...

    JavaScript动态级联下拉列表框

    JavaScript动态级联下拉列表框是一种常见的前端交互设计,它允许用户在选择一个选项后,根据选择的结果动态更新下一个下拉列表框的内容。这种技术在数据筛选、表单填写等场景中广泛应用,能够提高用户体验,减少不必...

    Android代码-级联菜单两级菜单自定义实现提供多种方式PopWindowFragment引用..rar

    这个压缩包文件"Android代码-级联菜单两级菜单自定义实现提供多种方式PopWindowFragment引用.."包含了实现这种功能的源码和相关资源,下面将详细介绍其关键知识点。 1. **自定义控件**:在Android中,级联菜单通常...

    jsp实现级联菜单 jsp实现级联菜单

    级联菜单的核心在于实现数据之间的联动关系,通常涉及到两个或多个下拉列表。当用户在第一个下拉列表中选择某一项后,第二个下拉列表会根据用户的选择动态更新其显示的选项。这种联动效果通常是通过JavaScript来实现...

Global site tag (gtag.js) - Google Analytics