一. 页面JSP代码如下
<% String userName = (String)request.getAttribute("username"); %> <html> <head> <title></title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <script type="text/javascript"> //{1} 定义主框架头panel var headPanel = new Ext.Panel({ border: false, layout:'anchor', region:'north', height:36, items: [{ xtype:'box', el:'headPanel', border:false, anchor: 'none -25' } ] }); //退出系统 function logoutclick(){ Ext.Msg.confirm("警告","是否退出系统?",function re(o){ if('yes'==o){ window.close(); } } ); } //{2} 定义主框架功能菜单panel var menuPanel = new Ext.Panel({ region: 'west', id: 'west-panel', title: '功能菜单', split: true, 200, minSize: 175, maxSize: 400, collapsible: true, autoScroll:false, margins: '0 0 0 2', layout:'accordion', layoutConfig:{ animate: true, activeItem :0 }, addmenu:function(list){ var menulist=list; if(list!=null&&list!='undefind') for(var i=0;i<menulist.length;i++){ var obj=menulist[i]; //建立菜单树 var tree=new Ext.tree.TreePanel({ id:'__menupanel__'+obj.id, title:obj.text, border: false, iconCls: 'icon-password', xtype:'treepanel', rootVisible: false, autoScroll:true, tools:[{ id:'refresh', qtip: '刷新', handler: function(event, toolEl, panel){ panel.getRootNode().reload(); } }], root: new Ext.tree.AsyncTreeNode({id:obj.id,text:obj.text}), listeners: { click: function(node,event) { if(node.leaf){ //后台传递过来的属性值都通过node.attributes进行获取 addTab(node.id,node.text,node.attributes.handle_represent) } } //加载节点 ,beforeload:function(node){ node.loader= new Ext.tree.TreeLoader( {dataUrl:'<%=basepath%>/menumanage/querymenu_list.action?p_menu_code='+node.id+'&username='+'<%=userName%>'} ); } } }); menuPanel.add(tree); }// end of for }// end of addmenu });// end of menuPanel //{3} 定义主框架操作区域panel var optRegionPanle = new Ext.TabPanel({ region: 'center', deferredRender: false, activeTab: 0, margins: '0 2 0 0', enableTabScroll:true, items: [{ title: '我的工作台', //autoLoad:{url:'userFastMenu.action',scripts:true}, autoLoad:'body.jsp', closable: false, autoScroll: false }] }); var fs; Ext.onReady(function(){ Ext.QuickTips.init(); //加载菜单 menuPanel.addmenu(${menulist}); var viewport = new Ext.Viewport({ layout: 'border', frame:true, items: [headPanel,menuPanel,optRegionPanle] }); }); //增加一个TAB,存在则直接显示 function addTab(id,title,url){ //存在该节点就转向,没有则新增 var tab = optRegionPanle.getComponent("_tab_" + id); //判断不存在tab且树的节点为叶子 if (!tab){ tab = optRegionPanle.add({ id:"_tab_"+id, title:title, iconCls: 'tabs', closable:true, html:'<iframe scrolling="auto" frameborder="0" width="100%" height="100%" src=<%=basepath%>'+url+' id=_tabcontent_'+id+'></iframe>' }); } optRegionPanle.setActiveTab(tab); } </script> </head> <body scroll="no"> <div id="headPanel"> <table width="100%" height="36" border="0" cellpadding="0" cellspacing="0" background="images/top-bg2.gif"> <tr> <td width="800" background="image/control.jpg" align="right"> </td> </tr> </table> </div> <div id="menuPanel" class="x-hide-display"> </div> <div id="pwd-win"> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%String basepath=request.getContextPath();%> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>1</title> <link rel="stylesheet" type="text/css" href="<%=basepath %>/resources/css/ext-all.css" /> <link rel="stylesheet" href="<%=basepath %>/resources/css/common.css" type="text/css"></link> <link rel="stylesheet" href="<%=basepath %>/resources/css/Ext.ux.UploadDialog.css" type="text/css"></link> <script type="text/javascript" src="<%=basepath %>/resources/js/ext-base.js"></script> <script type="text/javascript" src="<%=basepath %>/resources/js/ext-all-debug.js"></script> <script type="text/javascript" src="<%=basepath %>/resources/js/ext-lang-zh_CN.js"></script> <script type="text/javascript" src="<%=basepath %>/resources/js/windowposition.js"></script> <script type="text/javascript" src="<%=basepath %>/resources/js/IFrameComponent.js"></script> <script type="text/javascript" src="<%=basepath %>/resources/js/common.js"></script> <script type="text/javascript" src="<%=basepath %>/resources/js/gridToExcel.js"></script> <script type="text/javascript" src="<%=basepath %>/resources/js/myvtype.js"></script> <script type="text/javascript" src="<%=basepath %>/resources/js/myextplus.js"></script> <script type="text/javascript" src="<%=basepath %>/resources/js/Ext.ux.UploadDialog.js"></script> <script type="text/javascript" src="<%=basepath %>/resources/js/Ext.ux.UploadDialog.packed.js"></script> <script type="text/javascript" src="<%=basepath %>/resources/js/common_client.js"></script> <script type="text/javascript" src="<%=basepath %>/charts/FusionCharts.js"></script> <script type="text/javascript"> Ext.BLANK_IMAGE_URL = '<%=basepath%>/resources/images/default/s.gif'; Ext.QuickTips.init(); Ext.form.Field.prototype.msgTarget = "side"; </script> </head> </html>
2.menu 数据加载
struts 配置如下:
<struts> <package name="menumanage" namespace="/menumanage" extends="sys-default"> <action name="querymenu_list" class="MenuManageAction" method="queryMenuList"> </action> </package> </struts>
java代码如下:
1.action
public String queryMenuList() throws Exception { Map params_new = exchangeParams(); String str = menuManageService.queryMenuList(params_new);
<pre name="code" class="html"> String encding = "UTF-8"; response.setContentType(CONTENT_TYPE); OutputStream out = response.getOutputStream(); out.write(str.getBytes(encding)); out.flush(); out.close()
return NONE; }
2.service
public String queryMenuList(Map params) throws Exception { String menuStr = ""; List list = null; if (null != params && !params.isEmpty()) { list = menuManageDAO.queryMenuList(params); } return JSONArray.fromObject(list).toString();; }
3.dao
public List queryMenuList(Map params) { List argsList = new ArrayList(); StringBuffer sql = new StringBuffer(); Object args[] = null; int argTypes[] = null; sql.append("SELECT DISTINCT M.MENU_ID ID,NAME TEXT,(CASE M.MENU_FOLDER_FLAG WHEN '2' THEN 'TRUE' ELSE 'FALSE' END ) LEAFTEMP,SORT_NO,HANDLE_REPRESENT "); sql.append(" FROM " + this.tableSchema).append(".F_CONFIG_MENU M WHERE 1=1 "); String userName = String.valueOf(params.get("username")); List menuList = null; if (!StringUtil.isEmpty(userName)) { menuList = userDao.queryMenuListByUserName(userName); } String ss = "'"; for (int i = 0; i < menuList.size(); i++) { Map m = (Map)menuList.get(i); String str = String.valueOf(m.get("MENUID")); if (!StringUtil.isEmpty(str)) ss += str + "','"; } ss = ss.substring(0, ss.length() - 2); if (ss != "") { sql.append(" and M.MENU_ID in (").append(ss).append(") "); } if (StringUtil.isNullOrEmpty(params.get("p_menu_code"))) { sql.append("AND (P_MENU_CODE=(SELECT MENU_ID FROM " + this.tableSchema); sql.append(".F_CONFIG_MENU WHERE P_MENU_CODE IS NULL)) "); } else { sql.append("AND P_MENU_CODE=? "); argsList.add(params.get("p_menu_code")); } sql.append("order by sort_no "); if (argsList.size() > 0) { args = new Object[argsList.size()]; argTypes = new int[argsList.size()]; for (int i = 0; i < argsList.size(); i++) { args[i] = (Object)argsList.get(i); argTypes[i] = Types.BIGINT; } } return jdbcTemplateEx.query(sql.toString(), args, argTypes, new SuyRowMapper(MenuBean.class)); } public List queryMenuListByUserName(String userName) { StringBuffer sb = new StringBuffer(); sb.append(" select m.menu_id menuid,U.* from ") .append(this.tableSchema) .append(".") .append("sys_role_menu_ref m, ") .append(this.tableSchema) .append(".") .append("F_config_user u where m.role_id = u.roleid ") .append(" and u.name= ?"); return this.jdbcTemplateEx.queryForList(sb.toString(), new Object[] {userName}, new int[] {Types.VARCHAR}); }
简单表结构如下:
create table SYS_MENU ( MENU_ID NUMBER(16) not null, NAME VARCHAR2(256), TITLE VARCHAR2(256), P_MENU_CODE VARCHAR2(16), MENU_FOLDER_FLAG VARCHAR2(8), HANDLE_REPRESENT VARCHAR2(256), --PK_SYS_MENU_ID primary key (MENU_ID) ) create table SYS_ROLE_Menu_REF ( ROLE_Menu_REF_ID NUMBER(16) not null, Menu_ID NUMBER(16) not null, ROLE_ID NUMBER(16) not null, ---SYS_ACCOUNT_ROLE_REF_PK primary key (ACCOUNT_ROLE_REF_ID) )