Ext.Toolbar异步加载菜单

09年用Ext2.2.1,做了个Ext.Toolbar菜单,前几天又涉及到这样的菜单(Ext3.3.1),于是把原来的代码拷贝过来,居然还能用,在这里备份一下。
在网上也找过Ext.Toolbar异步加载的资料,说的不太详细,有些我看不太懂,但确实有menuStore这类的东西,后台动态加载,参考网址[url]http://www.sencha.com/forum/showthread.php?70436-Toolbar-or-Menu-with-Json-items[/url]
[url]http://www.lubber.de/extjs/storemenu/[/url]
不过我没看懂怎么用 :cry:
以下是我自己写的一个循环,能在3层或3层菜单以内起作用,只需把对象属性换成自己的对象属性就行了。
JSP代码,需要引用java.util.List,和自己的menu对象类

<%@ page contentType="text/html; charset=UTF-8"%>
<% String path = request.getContextPath(); %>
<%@ page import="com.xxx.xxx.model.*,java.util.*" %>

以下是菜单for循环

<%
//菜单树
List mList = (List)request.getAttribute("menuList");
Object[] obj = mList.toArray();
String menuStr = "'-'"; //开始的分隔符
boolean flag = false;
boolean flag2 = false;
int StrLength = 0;//定义子菜单头部字符串的长度,用来加{},{}之间的逗号
int StrLength2 = 0;//定义子菜单2头部字符串的长度,用来加{},{}之间的逗号
for(int i=0;i<obj.length;i++){
MenuInfo menu1 = new MenuInfo();
menu1 = (MenuInfo)obj[i];
if(menu1.getMenuParentId().equals("rooto")){ //第一层,导航栏上的显示菜单
menuStr += ",{";
menuStr += "text:'";


menuStr += menu1.getMenuName();
menuStr += "'";
String menuStr2 = ""; //定义一个字符串,接收第二层——下拉菜单

String pid=menu1.getMenuParentId();
flag = false;
for(int j=0;j<obj.length;j++){

MenuInfo menu2 = new MenuInfo();
menu2 = (MenuInfo)obj[j];
if(menu2.getMenuParentId().equals(menu1.getMenuId())){
if(menuStr2.length()==0){ //new一个menu
menuStr2 += ",menu:new Ext.menu.Menu({items:[";
StrLength = menuStr2.length();
}
if(menuStr2.length()> StrLength){
menuStr2 += ",";
}
menuStr2 += "{text:'";
menuStr2 += menu2.getMenuName();
menuStr2 += "'";

String menuUrl2 = "";
//加第二层菜单的listener
if(menu2.getRptName()!=null && !menu2.getRptName().equals("null")
&& menu2.getRptNamecn()!=null && !menu2.getRptNamecn().equals("null")){
//if(menu2.getMenuUrl()!=null && !menu2.getMenuUrl().equals("null")){

menuUrl2 = menu2.getRptName() + "_" + menu2.getRptNamecn();
menuStr2 += ",listeners:{ 'click':function(node, event) { event.stopEvent(); var n = tab.getComponent(node.id); ";
menuStr2 += "if (!n) { n = tab.add({ 'id':node.id, 'title':node.text, ";
menuStr2 += "closable:true, html:'<iframe scrolling=\"auto\" frameborder=\"0\" width=\"100%\" height=\"100%\" ";
//menuStr2 += path + menu2.getMenuUrl();
menuStr2 += "src=\""+ path +"/login/reportview.htmw?reportnameframe=" + menu2.getRptName() +"&rptName=" + menuUrl2
+"&rcType="+ menu2.getRcType() +"&reportenname="+ menu2.getRptNamecn()
+"\" ></iframe>' }); } tab.setActiveTab(n); }}";
}

//第三层(开始)
String menuStr3 = ""; //定义一个字符串,接收第三层菜单
String pid2=menu1.getMenuParentId();
flag2 = false;
for(int k=0;k<obj.length;k++){
MenuInfo menu3 = new MenuInfo();
menu3 = (MenuInfo)obj[k];
if(menu3.getMenuParentId().equals(menu2.getMenuId())){
if(menuStr3.length()==0){ //new一个menu
menuStr3 += ",menu:new Ext.menu.Menu({ items:[";
StrLength2 = menuStr3.length();
}
if(menuStr3.length()> StrLength2){
menuStr3 += ",";
}
menuStr3 += "{text:'";
menuStr3 += menu3.getMenuName();
menuStr3 += "'";

String menuUrl3 = "";
//加第三层(最后一层)菜单的listener
if(menu3.getRptName()!=null && !menu3.getRptName().equals("null")
&& menu3.getRptNamecn()!=null && !menu3.getRptNamecn().equals("null")){
//if(menu3.getMenuUrl()!=null && !menu3.getMenuUrl().equals("null")){
menuUrl3 = menu3.getRptName() + "_" + menu3.getRptNamecn();
menuStr3 += ",listeners:{ 'click':function(node, event) { event.stopEvent(); var n = tab.getComponent(node.id); ";
menuStr3 += "if (!n) { n = tab.add({ 'id':node.id, 'title':node.text, ";
menuStr3 += "closable:true, html:'<iframe scrolling=\"auto\" frameborder=\"0\" width=\"100%\" height=\"100%\" ";
menuStr3 += "src=\""+ path +"/login/reportview.htmw?reportnameframe=" + menu3.getRptName() +"&rptName=" + menuUrl3
+"&rcType="+ menu3.getRcType() +"&reportenname="+ menu3.getRptNamecn()
+"\" ></iframe>' }); } tab.setActiveTab(n); }}";
}

/**
这一块留下来等待菜单扩展
*/
menuStr3 += "}";
flag2 = true;
}
}
if(flag2==true && !pid2.equals(menu2.getMenuId())){ //如果有子节点并且循环到列表的最后一行也加]}),然后跳出
menuStr3 += "]})";
}
menuStr2 += menuStr3;
//第三层(结束)

menuStr2 += "}";
flag = true;
}

}
if(flag==true && !pid.equals(menu1.getMenuId())){
menuStr2 += "]})";
}
menuStr += menuStr2;
menuStr += "},'-'";
}
}
%>

以下为JS代码,当然要在JSP文件里面有这个renderTo的标签<div id="toolbar"></div>,或者按照自己的需要写。

<script type="text/javascript">
Ext.onReady(function(){
var tb = new Ext.Toolbar();
tb.render('toolbar');
tb.add(<%=menuStr %>);
tb.doLayout();
});
</script>

后台java代码,其实只需要把对象的属性封装好直接仍出来,前台能拿到对象的属性(菜单名称、url等)就行

this.getRequest().setAttribute("menuList", ls);

ls为List<Object>集合
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值