`

zk中动态产生多个组件的实现

阅读更多

zk动态产生多个页面的例子代码:

/**
 * 
 * @功能 添加参数
 * @author 创建人 gao_jie
 * @date 创建日期 Apr 23, 2009
 * @version 1.0
 * 
 */
public class AddParameter extends Window implements AfterCompose {

	private static final long serialVersionUID = 1L;

	private int num = 0;// 条件个数
	private Window win;// 参数风格
	private Rows parameterRows;// 条件行数
	private DesignerWnd desiWnd = null;
	@SuppressWarnings("unused")
	private Spreadsheet spreadSheet;
	private InforReport inforreport;

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.zkoss.zk.ui.ext.AfterCompose#afterCompose()
	 */
	public void afterCompose() {
		parameterRows = (Rows) this.getFellow("parameterRows");
		win = (Window) this.getFellow("AddParameter");
		desiWnd = (DesignerWnd) Sessions.getCurrent().getAttribute("dWnd");
		spreadSheet = (Spreadsheet) desiWnd.getFellow("spreadSheet");
		inforreport = spreadSheet.getReport();
		this.initiPage(inforreport.getParameters());
	}

	/**
	 * 初始化参数页面 获取已定义的参数 现实参数的name,type,defaultValue并可改
	 * 
	 * @param Parameters
	 */
	@SuppressWarnings("unchecked")
	public void initiPage(Map Parameters) {
		parameterRows.getChildren().clear();
		if (Parameters != null && !Parameters.isEmpty()) {
			// 遍历Parameters的键集
			Set parametset = Parameters.keySet();
			Iterator ir = parametset.iterator();
			while (ir.hasNext()) {
				String key = (String) ir.next();
				// 获取已有的每一个参数
				Parameter parameter = (Parameter) Parameters.get(key);
				// 计数器+1
				num = num + 1;
				// 为每个参数在parameterRows里创建一个Row
				Row row = new Row();
				row.setId("row_" + num);
				row.setParent(parameterRows);
				// 每个Row添加一个name,赋值为当前获取参数的name
				Textbox name = new Textbox();
				name.setId("name_" + num);
				name.setWidth("80px");
				name.setValue(parameter.getName());
				name.setParent(row);
				// 每个Row添加一个type,赋值为当前获取参数的type
				Listbox type = new Listbox();
				type.setParent(row);
				type.setId("type_" + num);
				type.setMold("select");
				type.appendChild(new Listitem("字符串|String", "String"));
				type.appendChild(new Listitem("整型|Int", "Int"));
				type.appendChild(new Listitem("日期|Date", "Date"));
				type.appendChild(new Listitem("长整型|Long", "Long"));
				type.appendChild(new Listitem("单精度|Single", "Single"));
				type.appendChild(new Listitem("双精度|Double", "Double"));
				type.appendChild(new Listitem("货币|Currency", "Currency"));
				type.appendChild(new Listitem("字节|Byte", "Byte"));
				type.appendChild(new Listitem("布尔|Boolean", "Boolean"));
				type.appendChild(new Listitem("时间|Time", "Time"));
				type.appendChild(new Listitem("日期时间|Datetime", "Datetime"));
				if (parameter.getType().contains("String")) {
					type.setSelectedIndex(0);
				} else if (parameter.getType().contains("Int")) {
					type.setSelectedIndex(1);
				} else if (parameter.getType().contains("Date")) {
					type.setSelectedIndex(2);
				} else if (parameter.getType().contains("Long")) {
					type.setSelectedIndex(3);
				} else if (parameter.getType().contains("Single")) {
					type.setSelectedIndex(4);
				} else if (parameter.getType().contains("Double")) {
					type.setSelectedIndex(5);
				} else if (parameter.getType().contains("Currency")) {
					type.setSelectedIndex(6);
				} else if (parameter.getType().contains("Byte")) {
					type.setSelectedIndex(7);
				} else if (parameter.getType().contains("Boolean")) {
					type.setSelectedIndex(8);
				} else if (parameter.getType().contains("Time")) {
					type.setSelectedIndex(9);
				} else if (parameter.getType().contains("Datetime")) {
					type.setSelectedIndex(10);
				} else {
					type.setSelectedIndex(0);
				}
				// 每个Row添加一个defaultValue,赋值为当前获取参数的defaultValue
				Textbox defaultValue = new Textbox();
				defaultValue.setId("parameter_" + num);
				defaultValue.setWidth("80px");
				defaultValue.setValue(parameter.getDefaultValue());
				defaultValue.setParent(row);
				// 每个Row添加一个"删除"按钮,触发删除事件
				Button delbtn = new Button();
				delbtn.setId("delbtd_" + num);
				delbtn.setLabel("删除");
				delbtn.addEventListener("onClick", new DelEventListener(num));
				delbtn.setParent(row);
			}
		}
	}

	/**
	 * 添加参数
	 */
	public void addParameter() {
		num = num + 1;
		// 产生Row
		Row row = new Row();
		row.setId("row_" + num);
		row.setParent(parameterRows);

		Textbox name = new Textbox();
		name.setId("name_" + num);
		name.setWidth("80px");
		name.setParent(row);

		Listbox type = new Listbox();
		type.setParent(row);
		type.setId("type_" + num);
		type.setMold("select");
		type.appendChild(new Listitem("字符串|String", "String"));
		type.appendChild(new Listitem("整型|Int", "Int"));
		type.appendChild(new Listitem("日期|Date", "Date"));
		type.appendChild(new Listitem("长整型|Long", "Long"));
		type.appendChild(new Listitem("单精度|Single", "Single"));
		type.appendChild(new Listitem("双精度|Double", "Double"));
		type.appendChild(new Listitem("货币|Currency", "Currency"));
		type.appendChild(new Listitem("字节|Byte", "Byte"));
		type.appendChild(new Listitem("布尔|Boolean", "Boolean"));
		type.appendChild(new Listitem("时间|Time", "Time"));
		type.appendChild(new Listitem("日期时间|Datetime", "Datetime"));
		type.setSelectedIndex(0);

		Textbox defaultValue = new Textbox();
		defaultValue.setId("parameter_" + num);
		defaultValue.setWidth("80px");
		defaultValue.setParent(row);

		Button delbtn = new Button();
		delbtn.setId("delbtd_" + num);
		delbtn.setLabel("删除");
		delbtn.addEventListener("onClick", new DelEventListener(num));
		delbtn.setParent(row);
	}

	/**
	 * 
	 * @功能 监听事件 "删除参数"
	 * 
	 */
	public class DelEventListener implements EventListener {
		int no;

		public DelEventListener(int no) {
			this.no = no;
		}

		@SuppressWarnings("unchecked")
		public void onEvent(Event arg0) throws Exception {
			// 移除才操作
			win.getFellow("row_" + no).detach();
			// 改变现有的,该行以后的所有行,上移一位
			for (int i = no + 1; i <= num; i++) {
				int j = i - 1;
				win.getFellow("row_" + i).setId("row_" + j);
				win.getFellow("name_" + i).setId("name_" + j);
				win.getFellow("type_" + i).setId("type_" + j);
				win.getFellow("parameter_" + i).setId("parameter_" + j);
				Button bun = (Button) win.getFellow("delbtd_" + i);
				Iterator ite = bun.getListenerIterator("onClick");
				bun.removeEventListener("onClick", (EventListener) ite.next());
				bun.setId("delbtd_" + j);
				bun.addEventListener("onClick", new DelEventListener(j));
			}
			num--;
		}
	}

	/**
	 * 保存选择
	 */
	@SuppressWarnings("unchecked")
	public void saveParameter() {
		Map map = new HashMap();
		// 定位到待保存的每一行
		for (int i = 1; i <= num; i++) {
			// 获取页面的输入值
			String name = ((Textbox) this.getFellow("name_" + i)).getValue()
					.trim();
			String type = (String) ((Listbox) this.getFellow("type_" + i))
					.getSelectedItem().getValue();
			String defaultValue = ((Textbox) this.getFellow("parameter_" + i))
					.getValue();
			// 当name不为空且不重复,则把页面获取的数据存入Parameter对象
			if (!"".equals(name) && !map.containsKey(name)) {
				Parameter tempparameter = new Parameter();
				tempparameter.setName(name);
				tempparameter.setType(type);
				tempparameter.setDefaultValue(defaultValue);
				// 再以name为键Parameter对象为值,存入一个Map对象
				map.put(name, tempparameter);
			} else if (map.containsKey(name)) {
				Message.showInfo("第" + i + "行参数名已存在");
				return;
			} else {
				Message.showInfo("第" + i + "行参数名不能为空");
				return;
			}
		}
		// 把已存的map作为参数列与report关联,并初始化页面
		num = 0;
		inforreport.setParameters(map);
		this.initiPage(inforreport.getParameters());
		Message.showInfo("保存成功!");
	}
}

 

分享到:
评论

相关推荐

    zk组件详解

    结合了LabelElement和Image的功能,可以在同一组件中同时显示文本和图片。 - **示例代码**: ```java // 创建一个LabelImageElement实例 LabelImageElement labelImage = new LabelImageElement(); labelImage....

    zk组件封装demo

    5. **封装设计**:在项目中,开发者可能会创建一个或多个类来封装ZooKeeper的操作,提供更简洁的接口,如`createNode()`, `deleteNode()`, `readData()`, `writeData()`等,同时处理异常和会话管理。 6. **Maven...

    zk中文人员开发手册.rar

    每个组件都有自己的属性、事件和行为,可以通过简单的 XML 或 Java 代码进行配置和绑定。 2. **事件处理**: ZK 的事件处理机制允许开发者直接在服务器端响应用户的操作,减少了客户端与服务器之间的通信负担,提高...

    zk框架学习中文手册

    ZUL文件类似于HTML,但包含了更多与ZK框架相关的指令,使得动态和交互性的页面构建更为便捷。 在ZK中,事件处理是其核心特性之一。当用户与UI组件交互时,事件会被触发并由服务器端处理。这种事件驱动模型使得...

    ZK开发文档中文HTML版

    文档会介绍ZUL的基本语法和组件标签,以及如何通过ZUL实现动态行为。 对于开发工具和集成环境,文档也会有所提及,如如何在Eclipse或IntelliJ IDEA中配置ZK项目,以及使用ZK Studio或ZK Developer插件提升开发效率...

    Zk中注解的使用(ZkDemo系列)

    `@Factory`通常用于创建组件实例,而`@Compose`用于组织多个组件,形成更复杂的视图结构。 7. `@SpringBean`:如果你的项目使用了Spring框架,此注解可以帮助你在ZK组件中注入Spring管理的bean。 在ZKDemo系列中,...

    ZK中文开发手册 html

    **ZK中文开发手册**是针对ZK框架的详尽指南,旨在帮助开发者更好地理解和使用这一强大的组件库和事件驱动的Java应用框架。ZK框架主要用于构建富客户端Web应用程序,它提供了一种简单的方式来创建交互式的用户界面,...

    zk中文开发手册pdf版(基于3.5.1)

    2. **组件使用**:书中详细介绍了各种组件的属性、事件和方法,帮助你熟练掌握每个组件的用法。 3. **事件处理**:讲解如何绑定事件监听器,处理客户端与服务器之间的交互,以及自定义事件的创建和传播。 4. **...

    ZK中文操作手冊.pdf

    - **页面**:由多个组件组成,代表了一个具体的用户界面。 - **桌面**:可以包含多个页面,类似于浏览器中的 Tab 页面。 - **组件树的森林**:ZK 使用组件树的概念来组织 UI 结构,每个页面都是一个组件树的根节点。...

    grovvy Reference zk

    - **组件模型**:ZK通过组件化的思想构建用户界面,每个UI元素都是一个组件。 - **事件系统**:ZK提供了一个强大的事件处理机制,支持各种类型的事件,如鼠标点击、键盘输入等。 - **数据绑定**:ZK支持将UI组件与...

    zk学习开发

    【ZK学习开发】 ZK是一个基于Java的轻量级MVC框架,专注...在实际开发中,理解每个组件的功能、属性和事件,以及如何组合使用,是掌握ZK的关键。通过深入学习和实践,你可以利用ZK构建出高效、用户体验优良的Web应用。

    zk 组件开发指南 部分内容

    你可以通过EL表达式`${requestScope.arg.self}`或Java代码来获取这个组件实例。例如: ```java Component self = (Component)((Map)request.getAttribute("arg")).get("self"); ``` 在生成组件的HTML标记时,需要...

    zk(ajax框架)中文手册

    综上所述,ZK框架是Java开发中的一个强大工具,特别适合那些希望简化AJAX应用开发的开发者。通过结合使用ZK、Dojo和JSF等技术,可以构建出功能丰富的、具有高度交互性的Web应用。同时,通过学习"zk手册3.5.1.chm"和...

    ZK_学习总结 ZK学习的好帮手

    实际开发中,需要将多个组件结合,实现复杂的业务功能。例如,表单组件(Form)与数据绑定(Data Binding)的结合,可以方便地处理用户输入。 - 自定义组件是提升应用灵活性的关键,通过继承已有的ZK组件,或使用...

    ZK框架:Ajax开发实战

    5. **Composer**:Composer是ZK中的一个关键概念,它是负责组件行为和状态管理的类。通过实现Composer,开发者可以控制组件的生命周期,监听和响应用户交互,实现复杂的业务逻辑。 6. **Scriplet**:Scriplet是ZK中...

    zk框架学习

    整个过程涉及多个层面的技术整合。 - **整合持久层**:选择适合的持久层技术(如Hibernate)并将其与ZK框架结合。 - **整合Spring**:使用Spring框架管理应用程序中的依赖关系和业务逻辑。 通过以上步骤,开发者...

    ZK 5.0.2 API

    5. **国际化与本地化**:ZK支持多语言环境,开发者可以通过定义资源包来实现应用的国际化。这使得应用程序可以根据用户的语言设置显示相应的文本和格式。 6. **SUL(Simple User Logic)和ZUML(ZK User Markup ...

    zktest_DEMO.rar_DEMO_ajax zk demo_portal_zk port_zk portal

    【描述】中的关键信息表明,这个DEMO是为了教学目的而创建的,它展示了在学习Ajax框架ZK的过程中,如何有效地将portal功能(可能指的是可自定义布局和组件的特性)与ZK框架相结合。"很合理地实现了portal拖动与ZK的...

    zk语言开发基于Ajax的东西

    3. **组件库**:ZK拥有一个丰富的组件库,包括各种UI控件,如按钮、表格、树形视图等,这些组件都内置了Ajax功能,可以实现异步数据交换。 4. **MVVM模式**:ZK支持Model-View-ViewModel(MVVM)设计模式,这使得...

    ZK 国际化(动态切换资源文件)1.0

    在这个“ZK 国际化(动态切换资源文件)1.0”主题中,我们将深入探讨如何实现ZK应用中的国际化,特别是如何动态地切换资源文件以支持多语言环境。 1. **ZK资源文件**:在ZK框架中,资源文件通常是以.properties格式...

Global site tag (gtag.js) - Google Analytics