operamasks 中动态创建多个树,并给多个树添加同一个事件处理方法

在系统中导航用layout:accordionLayout 布局,每个layout:panel根据用户权限动态生成,layout:panel下动态添加w:tree组件,那么可以用如下方法,对每个layout:panel底下的w:tree动态添绑定同一个事件监听处理方法,代码如下:

/**
	 * 在页面展示前,根据用户的功能权限,动态生成功能模块的树结构
	 * 
	 * @param isPostback
	 */
	@BeforeRender
	public void beforeRender(boolean isPostback) {

		// 
		if (isPostback) {
			return;
		}

		FacesContext context = FacesContext.getCurrentInstance();
		Application app = context.getApplication();

		// 1、根据用户的功能模块权限,查找属于用户的功能模块信息
		HttpSession session = (HttpSession) context.getExternalContext()
				.getSession(true);
		// 用户登录信息
		LoginInfo loginInfo = (LoginInfo) session
				.getAttribute(Global.LOGIN_INFO);

		// 2、循环功能模块信息列表,动态构建功能模块及操作模块
		List<XtGnmk> gnmkList = mainService.getGnmkList(loginInfo);

		// 循环功能模块列表,动态生成树结构
		int i = 0;
		for (XtGnmk gnmk : gnmkList) {

			// 只对第一级的节点处理
			if (gnmk.getMkBh().length() == 2) {

				// 新建功能模块的抽屉标签
				UIPanel panel = (UIPanel) app
						.createComponent(UIPanel.COMPONENT_TYPE);
				panel.setTitle(gnmk.getMkMc());
				panel.setBorder(false);
				panel.setCollapsed(true);
				
				// 给功能模块抽屉下添加功能模块树
				UITree tree = (UITree) app
						.createComponent(UITree.COMPONENT_TYPE);
				tree.setValue(new XtGnmkTreeDataProvider(gnmk));
				tree.setId("tree" + i);
				tree.setRootVisible(false);
				tree.setExpandAll(true);
				// 为树结构添加点击事件的监听
				tree.getAjaxEventHandler().addElBinding("onclick",
						"#{mainBean.tree_onclick}", false);

				// 将生成的Tree添加到对应的抽屉下
				panel.getChildren().add(tree);

				// 将抽屉添加到功能导航LayoutPanel中
				layout.getChildren().add(panel);

				i++;
			}
		}
	}

	/**
	 * 为树添加事件的监听,执行页面的专项操作
	 * 
	 * @param event
	 */
	public void tree_onclick(TreeNodeEvent event) {

		// 根据事件对象,得到事件的Node
		UITreeNode node = event.getEventNode();
		//  得到节点中的功能模块对像
		XtGnmk gnmk = (XtGnmk) node.getUserData();
		// 得到功能模块连接的url
		String url = gnmk.getUrl();
		// 激活contentLayout中的第二个Tab,即工作区的Panel
		content.setActiveTab(1);
		// 设置工作区的Frame的URL,执行页面的转向
		workPanelFrame.load(url);
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值