主jsp页面如下: <%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib prefix="ww" uri="/webwork"%> <%@ taglib prefix="lovebugs" uri="http://www.lovebugs.cn"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title>VVV</title> <link rel="stylesheet" type="text/css" href="js/ext331/resources/css/ext-all.css" /> <link rel="stylesheet" type="text/css" href="js/ext331/resources/css/yourtheme.css" /> <link rel="stylesheet" type="text/css" href="js/ext331/resources/docs.css" /> <link rel="stylesheet" type="text/css" href="js/ext331/resources/style.css" /> <link rel="shortcut icon" href="js/ext331/resources/favicon.ico" /> <link rel="icon" href="js/ext331/resources/favicon.ico" /> <style type="text/css"></style> <script type="text/javascript">var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-1396058-8']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();</script> <script type="text/javascript" src="js/ext331/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="js/ext331/ext-all.js"></script> <script type="text/javascript" src="js/ext331/ux/TabCloseMenu.js"></script> <script type="text/javascript" src="js/ext331/docs.js"></script> <script type="text/javascript"> _tabs=[${strmenus}]; function hideAllMenu() { Ext.menu.MenuMgr.hideAll(); } </script> <style> <!-- .x-toolbar-ct { background-color:#eeeeee; } --> </style> </head> <body scroll="no" id="docs"> <div id="loading-mask"></div> <div id="loading"> <div class="loading-indicator"> <img src="resources/default/images/loading/progress.gif" width="32" height="32" style="margin-right:8px;" align="absmiddle" /> Loading… </div> </div> <div id="header"> <div style="float:right;color: #FF0000;position:relative;top:5px;right:15px;"> <a href="#" style="padding:5px">用户信息</a> | <a href="loginout.shtml">退出</a> </div> </div> <div id="main"></div> <div id='win_template'> </div> </body> </html> docs.js是整个框架的脚本 Ext.BLANK_IMAGE_URL = 'js/ext331/resources/s.gif'; /*全局变量*/ var _navigation=null; var _load = null; var _tabs = [{url:"usermanager.shtml",text:"用户管理",icon:"icon-user",items:[{url:"usermanager.shtml",text:"认证用户管理",icon:"icon-acuser"} ,{url:"groupmanager.shtml",text:"用户组管理",icon:"icon-group"} ,{url:"sysuser.shtml",text:"系统用户管理",icon:"icon-user"}]} ,{url:"usermanager.shtml",text:"上下线信息",icon:"icon-user",items:[{url:"usermanager.shtml",text:"用户管理"} ,{url:"usermanager.shtml",text:"组管理"}]} ]; var _topH = 55; var _topToolbar=null; function _push(index,o){ if(null!=_navigation) { _navigation.push(index,o.href,o.innerHTML); } } /*导航*/ Navigation = function() { var navigation_pre="<div style='height:20px;'><label>当前位置:</label>"; var navigation_end="</div>"; return { nav_arr:[], toStr:function() { var str_nav = navigation_pre; for(var i=0;i<this.nav_arr.length;i++) { if(i==0) { str_nav+=this.nav_arr[i]; }else{ str_nav=str_nav+" >> "+this.nav_arr[i]; } } str_nav += navigation_end; return str_nav; }, /*index为菜单级,tab为0级*/ push:function(index,href,title) { if(href==''){ var a = title; }else{ var a = "<a href='"+href+"' target='mainframe' onclick='javascript:_push("+index+",this)'>"+title+"</a>"; } /*变更当前节点的值 消掉多余的项*/ if(this.nav_arr.length-1>index) { this.nav_arr.length=index+1; this.nav_arr[index]=a; }else if(this.nav_arr.length-1<index){ this.nav_arr[index] = a; }else { this.nav_arr[index]=a; } }, remove:function() { }, update:function() { if(null!=_topToolbar) { Ext.get(_topToolbar.items.get(0).id).dom.innerHTML=this.toStr(); } } }; }; DocPanel = Ext.extend(Ext.Panel, { url: '', menu:null, autoScroll:true, initComponent : function(){ DocPanel.superclass.initComponent.call(this); } }); MainPanel = function(){ this.searchStore = new Ext.data.Store({ proxy: new Ext.data.ScriptTagProxy({ url: 'http://extjs.com/playpen/api.php' }), reader: new Ext.data.JsonReader({ root: 'data' }, ['cls', 'member', 'type', 'doc'] ), baseParams: {}, listeners: { 'beforeload' : function(){ this.baseParams.qt = Ext.getCmp('search-type').getValue(); } } }); MainPanel.superclass.constructor.call(this, { id:'doc-body', region:'center', margins:'5 5 5 5', resizeTabs: true, minTabWidth: 125, tabWidth: 135, maskDisabled:false, enableTabScroll: true, activeTab: 0, html:"<iframe id=\"mainframe\" name=\"mainframe\" width='100%' marginwidth='0' marginheight='0' height='100%' class='module' frameborder=\"0\" scrolling='auto'></iframe>" ,tbar:['--'] }); }; Ext.extend(MainPanel, Ext.TabPanel, { initEvents : function(){ MainPanel.superclass.initEvents.call(this); }, listeners:{ 'tabchange':function(tp, tab) { /*tab切换*/ var link = tab.url; var href = link.url; document.getElementById("mainframe").src=href; /*导航置为第一项*/ _navigation.push(0,href,tab.title); } }, initalltab:function(){ /*创建一个额外的菜单,用途是:当没有菜单的tab over之后,这个额外的菜单隐藏显示,从而关闭上一次显示的菜单*/ var ix = new Ext.menu.Menu({width:0}); /*初始化tab鼠标移动事件。注意tab标签的id是由MainPanel的id与Tab的id加__组成*/ this.items.each(function(item ,index,length){ var tpid = this.id; var tabid = item.id; Ext.get(tpid+"__"+tabid).on("mouseover",function(){ var a = [];a.push(this.getLeft());a.push(_topH+36); if(null!=item.menu) { item.menu.showAt(a); }else { ix.showAt([-1000,-1000]); } }); },this); }, loadTab : function(href,cls,title,menu,icon){ var id = 'tab-' + cls; //alert(href); this.add(new DocPanel({ id:id, title: title, iconCls:icon, menu:menu, url:{url: href} })); } }); MenuItem = Ext.extend(Ext.menu.Item,{ tp:null, tabid:0, initComponent : function(){ MenuItem.superclass.initComponent.call(this); }, handler:function() { if(null!=this.tp) { /*点击菜单项,tab切换到当前tab*/ this.tp.setActiveTab(this.tabid); /*topbar显示栏变化*/ _navigation.push(1,this.href,this.text); } } }); /*框架页面*/ Ext.onReady(function(){ Ext.QuickTips.init(); _load = new Ext.LoadMask(Ext.getBody(), {msg:"页面加载中..."}); _navigation = new Navigation(); /*创建TabPanel*/ var mainPanel = new MainPanel(); /*tabs由外层传入,目前只支持一级菜单,如果需要实现多级菜单,那么就要用递归实现*/ for(var i=0;i<_tabs.length;i++) { var tab_json = _tabs[i]; /*tab为json字符串 {url:xxx,text:yyy,items:[{},{}]}*/ var oTab =null; try{ if(tab_json instanceof String) { oTab = Ext.util.JSON.decode(tab_json); }else { oTab = tab_json; } }catch(e){ Ext.Msg.alert("提示","菜单项加载失败!"); } if(null==oTab) {continue;} var _items = oTab.items; /*如果菜单没有子项,则不给这个tab添加菜单*/ if(0==_items.length) { mainPanel.loadTab(oTab.url,i,oTab.text,null,oTab.icon); }else {/*如果菜单有子项,则给这个tab添加菜单,并给菜单填写子项*/ var menu = new Ext.menu.Menu({ width :150, shadow :'drop' }); mainPanel.loadTab(oTab.url,i,oTab.text,menu,oTab.icon); for(var x = 0;x<_items.length;x++) { var _item = _items[x]; menu.addItem(new MenuItem({text:_item.text,href:_item.url,hrefTarget:'mainframe',tabid:i,tp:mainPanel,iconCls:_item.icon})); menu.addItem(new Ext.menu.Separator({labelSeparator:':'})); } } } /*Viewport布局*/ var viewport = new Ext.Viewport({ layout:'border', items:[ { cls: 'docs-header', height: _topH, region:'north', xtype:'box', el:'header', border:false, margins: '0 0 5 0' }, mainPanel,{ cls: 'docs-header', region:'south', height: 30, html:'Copyright © 2011 XXXX 版权所有' } ] }); viewport.doLayout(); /*初始化tabs*/ mainPanel.initalltab(); _topToolbar=mainPanel.getTopToolbar(); /*首次加载Loading*/ setTimeout(function(){ Ext.get('loading').remove(); Ext.get('loading-mask').fadeOut({remove:true}); }, 250); }); //--------------------------------------------------------------------------打开窗口 function openWindow(titlex,url,param,only,w,h) { var text = "<div id='hello-win' class='x-hidden'><div class='x-window-header'>窗口</div></div>"; Ext.get('win_template').dom.innerHTML=text; if(param.length!=0) { if(url.indexOf("?")!=-1){ url = url+'&id='+param; }else{ url = url+'?id='+param; } }else{ } var w = new Ext.Window({ applyTo:'hello-win', layout:'fit', width:w, height:h, resizable:false, modal : true, monitorResize :true, x:250, y:50, title:'IT与运维操作审计系统', closeAction:'close', listeners :{ "close":function(){ lbgrid.store.reload(); } }, plain: true, items: new Ext.Panel({ id: "panel2", fitToFrame: true }) }); w.show(this);//窗口显示 var ocmp = w.getComponent(0); window.setTimeout(function(){ocmp.getEl().dom.lastChild.lastChild.innerHTML='<iframe src='+url+' frameborder="0" width='+w+' height='+h+' style="overflow:hidden;" ></iframe>'},300); }

评论