`
徜徉の小溪
  • 浏览: 447602 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

    博客分类:
  • ZK
阅读更多

 

 

//前台页面的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}"
				fixedLayout="true" paginal="@{pagingUser}" selectedItem="@{userWin.user}"
				onSelect="showUserEdit();">
				<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>
 

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

 

//后台绑定Controller类 下面有详细的注释

public class UserController extends Window implements AfterCompose {

protected AnnotateDataBinder binder;
	private User user = new User();
	private User u = new User();
	private Chinaregion province = new Chinaregion();
	private Chinaregion city = new Chinaregion();
	private Chinaregion district = new Chinaregion();
	private Role role = new Role();
	private Company company = new Company();
	protected Dept dept = new Dept();
	private Company companyEdit = new Company();
	private Dept deptEdit = new Dept();

	private Combobox cbxCompany;
	protected Listbox userLbx;
	protected Paging pagingUser;
	protected Combobox cbxProvince;
	protected Combobox cbxCity;
	protected Combobox cbxDistrict;
	private Combobox cbxDept;
	private Combobox cbxCom;
	private Combobox cbxDep;

	private List<Company> companyList;
	private List<User> userList;
	private List<Dept> deptList;
	private List<Role> roleList;
	private List<Chinaregion> provinceList;
	private List<Chinaregion> cityList;
	private List<Chinaregion> districtList;

	public Dept getDeptEdit() {
		return deptEdit;
	}

	public void setDeptEdit(Dept deptEdit) {
		this.deptEdit = deptEdit;
	}

	public Dept getDept() {
		return dept;
	}

	public Chinaregion getDistrict() {
		return district;
	}

	public void setDistrict(Chinaregion district) {
		this.district = district;
	}

	public Chinaregion getProvince() {
		return province;
	}

	public Chinaregion getCity() {
		return city;
	}

	public void setCity(Chinaregion city) {
		this.city = city;
	}

	public void setProvince(Chinaregion province) {
		this.province = province;
	}

	public Role getRole() {
		return role;
	}

	public void setRole(Role role) {
		this.role = role;
	}

	public void setDept(Dept dept) {
		this.dept = dept;
	}

	public List<Chinaregion> getProvinceList() {
		return provinceList;
	}

	public void setProvinceList(List<Chinaregion> provinceList) {
		this.provinceList = provinceList;
	}

	public List<Chinaregion> getCityList() {
		return cityList;
	}

	public void setCityList(List<Chinaregion> cityList) {
		this.cityList = cityList;
	}

	public List<Chinaregion> getDistrictList() {
		return districtList;
	}

	public void setDistrictList(List<Chinaregion> districtList) {
		this.districtList = districtList;
	}

	public List<Role> getRoleList() {
		return roleList;
	}

	public void setRoleList(List<Role> roleList) {
		this.roleList = roleList;
	}

	public Company getCompany() {
		return company;
	}

	public void setCompany(Company company) {
		this.company = company;
	}

	public User getU() {
		return u;
	}

	public void setU(User u) {
		this.u = u;
	}

	public List<Dept> getDeptList() {
		return deptList;
	}

	public void setDeptList(List<Dept> deptList) {
	}

	public List<Company> getCompanyList() {
		return companyList;
	}

	public void setCompanyList(List<Company> companyList) {
		this.companyList = companyList;
	}

	public User getUser() {
		return user;
	}

	public List<User> getUserList() {
		return userList;
	}

	public void setUserList(List<User> userList) {
		this.userList = userList;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public Company getCompanyEdit() {
		return companyEdit;
	}

	public void setCompanyEdit(Company companyEdit) {
		this.companyEdit = companyEdit;
	}
	/**
	 * 组件创建时初始化的事件监听器
	 */
	public void init() {
		// UserService service= (UserService) SpringUtil.getBean("userService");
		// int count =service.countUser();
		// pagingUser.setTotalSize(count);

		pagingUser.addEventListener(ZulEvents.ON_PAGING,
				new UserPagingEventListener());
		userLbx.addEventListener(Events.ON_SELECT,
				new UserSelectedEventListener());
		cbxProvince.addEventListener(Events.ON_SELECT,
				new ProvinceSelectedEventListener());
		cbxCity.addEventListener(Events.ON_SELECT,
				new CitySelectedEventListener());
		cbxCom.addEventListener(Events.ON_SELECT,
				new EditCompanySelectedEventListener());
		if (judgeCompontent(cbxCompany)) {
			cbxCompany.addEventListener(Events.ON_SELECT,
					new CompanySelectedEventListener());
		}
	}


	/**
	 * 初始化所属公司下的部门列表
	 * 
	 * @param company
	 */

        public void initDept(Company company) {
		DeptService service = (DeptService) SpringUtil.getBean("deptService");
		deptList = service.getDeptsByCoId(company);
		binder.loadComponent(cbxDep);
	}
         /**
	 * 初始化公司列表
	 */

        public void initCompany() {
		CompanyService service = (CompanyService) SpringUtil
				.getBean("companyService");
		companyList = service.getCompanyAll();
	}



         /**
	 * 动态绑定变量值
	 */
	@Override
	public void afterCompose() {

		Components.wireVariables(this, this);
		Components.addForwards(this, this);
		initiaData();
	}



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

	class EditCompanySelectedEventListener implements EventListener {
		public void onEvent(Event event) throws Exception {

			if (deptList == null || deptList.isEmpty())
				return;
			// 循环迭代Dept集合对象
			for (Iterator<Dept> it = deptList.iterator(); it.hasNext();) {
				Dept each = it.next();
				if (StringUtils.equals(user.getDeptid(), each.getId())) {
					deptEdit = each;// 赋值给cbxDep绑定的对象;
					// 重新绑定对象
					binder.loadComponent(cbxDep);
					return;
				}
			}
		}
	}
 

 

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

 

 

1
1
分享到:
评论
1 楼 yinger_fei 2011-02-14  
想看看这个例子的完整版?

相关推荐

    级联菜单 动态级联菜单

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

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

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

    .net下拉菜单的级联实现源码

    在.NET框架中,级联下拉菜单(Cascading Dropdown)是一种常见的用户界面设计,它允许用户在选择一个选项后,第二个或更多的下拉菜单会根据前一个选择更新其选项。这种交互方式常用于数据库相关的应用程序,以减少...

    Javascript-三级下拉菜单的级联显示实例

    在JavaScript的帮助下,我们可以创建复杂的动态下拉菜单,比如三级级联的下拉菜单。这种菜单允许用户逐步导航到深层的选项,使得大量数据的分类和选择更为便捷。 **JavaScript三级下拉菜单的基本原理** JavaScript...

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

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

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

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

    layui树形下拉菜单完整实例

    在本文中,我们将深入探讨如何使用layui框架中的tree模块创建一个功能完备的树形下拉菜单。layui是一款轻量级的前端UI框架,它提供了丰富的组件和API,使得开发者能够快速构建美观且响应式的Web应用。在“layui树形...

    select2 省市区 级联 下拉菜单

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

    JavaScript动态级联下拉列表框

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

    js下拉级联例子

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

    excel设置下拉选项、级联、列头锁定.docx

    在Excel中,设置下拉选项、级联以及列头锁定是提高工作效率和数据一致性的重要功能。以下是关于这些功能的详细说明: ### 设置简单下拉选项 无论是WPS还是Office,都可以通过两种方法来实现。 #### 方法1:设置...

    级联下拉菜单

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

    javascript四级级联下拉菜单

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

    jquery下拉菜单级联选择地区

    在IT领域,级联下拉菜单(Cascading Dropdown)是一种常见的交互设计,它用于创建一个联动的效果,用户在一个下拉菜单中选择一项后,另一个相关的下拉菜单会更新其选项,以显示与前一次选择相关的内容。在这个场景中...

    JQuery写的日期级联下拉菜单

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

    动态实现下拉列表框三级级联查询

    在IT领域,动态实现下拉列表框的三级级联查询是一项常见的前端交互功能,它能够为用户提供更加便捷的导航和筛选体验。在这个场景中,我们使用JSP(JavaServer Pages)脚本语言来实现这一功能。JSP是Java平台上的...

    Struts2+Hibernate写的下拉菜单级联两级分类

    第一个下拉菜单的选项应由顶级分类填充,第二个下拉菜单的选项则依赖于第一个下拉菜单的选择,通过JavaScript或jQuery监听第一个下拉菜单的change事件,动态更新第二个下拉菜单的内容。 5. **Ajax交互**:为了实现...

    jQuery ajax JSON 下拉列表框级联

    在Web开发中,级联下拉列表是一种常见的交互设计,用户选择一个选项后,另一个相关的下拉列表会根据前者的选值动态更新。这个过程通常涉及到前端与后端的交互,利用JavaScript库如jQuery和服务器端框架如Spring MVC...

    级联下拉菜单:级联表单下拉菜单

    演示版基本用法要使用该插件而不覆盖任何默认设置,您需要使用多个下拉(选择)菜单创建表单的结构。 在以下示例中,我正在使用&lt;form&gt; &lt;select name="category" class="cascadingDropDown" data-group=...

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

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

Global site tag (gtag.js) - Google Analytics