`
weibaojun
  • 浏览: 97737 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

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);
	}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics