`

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组件详解

    zk内部多种组件的使用说明,提供了zk种各种组件的使用方法,代码示例。

    dubbo admin +zk

    ZooKeeper本质上是一个分布式...原本是Apache Hadoop的一个组件,现在被拆分为一个Hadoop的独立子项目,在Hbase(Hadoop的另外一个被拆分出来的子项目,用于分布式环境下的超大数据量的DBMS)中也用到了ZooKeeper集群。

    ZK知识学习积累总结

    ZK是一个专注于页面的框架,界面有很多组件是已经设计好,直接使用也是非常漂亮的。运行速度较慢,不适合做网站。

    bboss-http:bboss http 服务组件

    多个地址用逗号分隔 6.服务安全认证(配置basic账号和口令) 7.主备路由/异地灾备特色 负载均衡器主备功能开发,如果主节点全部挂掉,请求转发到可用的备用节点,如果备用节点也挂了,就抛出异常,如果主节点恢复...

    java开源包3

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包4

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    MySQL借助DB实现分布式锁思路详解

    DB对于系统来说本身就默认为高可用组件,针对一些低频的业务使用DB实现分布式锁也是一个不错的解决方案,比如控制多机器下定时任务的起调,针对审批回调处理等,本文将给出DB实现分布式锁的一些场景以及解决方案,...

    JAVA上百实例源码以及开源项目

    第三步:在登陆后的界面文本框输入文本,然后发送 可以同时启动多个客户端 实现群聊。 浮动的广告 嵌套在html中 各种EJB之间的调用示例 7个目标文件 摘要:Java源码,初学实例,EJB调用实例  各种EJB之间的调用源码...

    JAVA上百实例源码以及开源项目源代码

    然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第三步:在登陆后的界面文本框输入文本,然后发送 可以同时启动多个客户端 实现群聊。 浮动的广告 嵌套在...

    java开源包1

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包11

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包2

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包6

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包5

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包10

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包8

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包7

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包9

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

    java开源包101

    JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...

Global site tag (gtag.js) - Google Analytics