Eeid—ligerUI学习(1)[首页布局]

来源:互联网 发布:js 中 json点不出来 编辑:程序博客网 时间:2024/04/30 20:51

EeidDemo



登陆以后跳入的页面main.jsp

main.jsp

<%@page language="java" contentType="text/html;charset=UTF-8"%><%@taglibprefix="s" uri="/struts-tags"%><%       String path = request.getContextPath();%><html><head> <title>欢迎使用证书签发管理系统</title><metahttp-equiv="pragma" content="no-cache"><metahttp-equiv="cache-control" content="no-cache"><metahttp-equiv="expires" content="0"><linkrel="stylesheet" type="text/css"       href="<%=path%>/StaticRes/css/main.css"/><linkhref="<%=path%>/StaticRes/css/ligerui-all.css"rel="stylesheet"       type="text/css" /><linkhref="<%=path%>/StaticRes/css/common.css"rel="stylesheet"       type="text/css" /><scriptsrc="<%=path%>/UIRes/jquery/jquery-1.3.2.min.js"       type="text/javascript"></script><scriptsrc="<%=path%>/UIRes/ligerUI/js/ligerui.all.js"       type="text/javascript"></script><scriptsrc="<%=path%>/StaticRes/js/common.js"type="text/javascript"></script> <scripttype="text/javascript">  var tab = null;  var menu;  var actionNodeID;  var nodeUrl;  var treeManager = null;  var accordion = null;  var tabItems = [];  var tabidcounter = 0;  $(function ()  {      //布局      $("#layout1").ligerLayout({leftWidth: 190, height: '100%',heightDiff:-34,space:4, onHeightChanged:f_heightChanged });       var height =$(".l-layout-center").height();      //Tab      $("#framecenter").ligerTab({          height: height,          showSwitchInTab : true,          showSwitch: true           });       //面板     $("#accordion1").ligerAccordion({ height: height - 24, speed:null });      //绑定菜单事件     //鼠标滑过事件      $("ul.menulistli").hover(function () {          $(this).addClass("over");   //添加css样式,over类是js样式库中的      }, function () {         $(this).removeClass("over");//去除css样式      });      //菜单点击事件      $("ul.menulistli").click(function () {             //得到id并且依据【id,title,url】添加tab          var tabid =$(this).attr("menuno");          f_addTab(tabid,$(this).attr("title"), $(this).attr("url"));      });       //获取framecenter属性赋给tab      tab = liger.get("framecenter");      //获取accordion1属性赋给accordion      accordion =liger.get("accordion1");      $("#pageloading").hide();           //指定菜单的数据源      menu = $.ligerMenu({ top: 100, left: 100,width: 120, items:             [                 //右键出现的文字、点击事件(itemclick下面有定义)、图标                    { text: '增加', click: itemclick, icon: 'add'},                    { text: '修改', click: itemclick },                    { line: true },                    { text: '查看', click: itemclick }                    ]            });           //构造树级菜单        $("#treeMenu").ligerTree({           //该url用于得到构建树的请求动作        url:'<%=path%>/ajax_Login_treeMenu.do',          ajaxType:'get',          checkbox:false,//参数:是否有复选框,默认值为true          isExpand:false,//参数:是否展开,默认为null          onSuccess:f_onSuccess,//加载成功事件: (data)          onClick:f_click,//点击事件:({data,target})          //右击事件          onContextmenu:function (node, e)               {                    actionNodeID = node.data.text;//节点文本                    nodeUrl =node.data.url;            //节点URL                    menu.show({ top: e.pageY, left: e.pageX});//显示位置                    return false;               }      });  });      // treeManager =$("#treeMenu").ligerGetTreeManager();       function f_click(node)       {              if(node.data.url !=null)                     //f_addTab方法下面有定义                     f_addTab(node.data.id,node.data.text, node.data.url);              else if(!isLeaf)                     {                                                }       //f_add(node.data.url,node.data.text,600,400);              /* else              {              var nodes =treeManager.getSelected();              treeManager.onExpand(nodes);              } */       }             function itemclick(item, i)       {       //f_addTab(item.id,actionNodeID+item.text, nodeUrl);              f_add(nodeUrl, item.text,600,400);       }   function f_heightChanged(options)  {       if (tab)          tab.addHeight(options.diff);      if (accordion &&options.middleHeight - 24 > 0)          accordion.setHeight(options.middleHeight -24);  }   function f_addTab(tabid, text, url)  {      if (!tab) return;//如果该tab存在不做处理      if (!tabid) {          tabidcounter++;          tabid = "tabid" +tabidcounter;      }      //isTabItemExist:依据tabid判断tab是否存在的方法      //这里每次点击一下树菜单,会有刷新的效果        if (tab.isTabItemExist(tabid)) {//如果该tabid的tab存在          //方法:移除一个tab               tab.removeTabItem(tabid);           //方法:增加一个tab          tab.addTabItem({ tabid: tabid, text:text, url: url });      }        else{          tab.addTabItem({ tabid: tabid, text:text, url: url });        }     }</script> </head><body>       <divid="pageloading"></div>       <div id="topmenu"class="l-topmenu">              <divclass="l-topmenu-logo">SSAward管理后台</div>              <div class="l-topmenu-welcome">                     <ahref="javascript:chkLogout();" class="l-link2">退出</a>              </div>       </div>        <div id="layout1"style="width: 99.2%; margin: 0 auto; margin-top: 4px;">              <div position="left"title="主要菜单"id="accordion1">                     <div title="树级菜单">                            <ulid="treeMenu" style="margin-top:3px;"></ul>                     </div>                     <!-- 一级菜单 -->                     <div title="一级菜单">                            <ulclass="menulist">                                   <!-- 对应loginAction中dispatcherMenu方法(将参数传递过去) -->                                   <!-- 这里所有的二级菜单虽然对应Action和方法都是一样的,但是由于传的参数不一样,                                              效果也是完全不一样,因为Action中的相应方法实现的是页面跳转 -->                                   <!-- 总结:li(url/title/menuno)->img(src)->div(class)-->                                   <liurl="<%=path%>/syn_Login_dispatcherMenu.do?menuUrl=gridview"title="表格测试"menuno="no1">                                          <imgsrc="<%=path%>/StaticRes/icons/32X32/search.gif"/><span>表格测试</span>                                          <divclass="menuitem-l"></div>                                          <divclass="menuitem-r"></div></li>                                   <liurl="<%=path%>/syn_Login_dispatcherMenu.do?menuUrl=tree"                                          title="树形菜单"menuno="no2"><img                                          src="<%=path%>/StaticRes/icons/32X32/bank.gif"/><span>树形菜单</span>                                          <divclass="menuitem-l"></div>                                          <divclass="menuitem-r"></div></li>                            </ul>                     </div>                                         <div title="一级菜单2">                            <ulclass="menulist">                                   <liurl="<%=path%>/syn_Login_dispatcherMenu.do?menuUrl=upload"title="二级菜单3"menuno="no3">                                          <imgsrc="<%=path%>/StaticRes/icons/32X32/search.gif"/><span>二级菜单</span>                                          <divclass="menuitem-l"></div>                                          <divclass="menuitem-r"></div></li>                                   <liurl="myprojectlist.aspx" title="二级菜单4"menuno="no4"><img                                          src="<%=path%>/StaticRes/icons/32X32/bank.gif"/><span>二级菜单</span>                                          <divclass="menuitem-l"></div>                                          <divclass="menuitem-r"></div></li>                            </ul>                     </div>              </div>              <divposition="center" id="framecenter">                     <divtabid="ifm_Div" title="我的主页"style="height: 300px">                     <!-- iframe 元素会创建包含另外一个文档的内联框架(即行内框架)                             frameborder:取值0&1,规定是否显示框架周围的边框                             name:规定iframe 的名称                      -->                            <iframeframeborder="1" name="ifm_work"id="ifm_work"></iframe>                     </div>              </div>       </div>             <!-- line-height:表示文字和线的距离 -->       <div style="height: 20px;line-height: 20px; text-align: center;">              Copyright © 2011-2014www.baidu.com</div></body> <scriptlanguage="javascript">  //iframe在加载的时候会加载三次,导致action被调用三次,所以才用动态赋值。//只有加载完成了之后才给src赋值。document.onreadystatechange=function(){       if (document.readyState=="complete"){              document.getElementById("ifm_work").src="<%=path%>/syn_Login_dispatcherMenu.do?menuUrl=welcome";       }}</script></body><s:includevalue="message.jsp"></s:include></html> <!--总结:       该页面的跳转有:gridviewtree upload welcome -->

对应的Struts.xml

<?xml version="1.0"encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD StrutsConfiguration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>   <constant name="struts.enable.DynamicMethodInvocation"value="false" />   <constant name="struts.action.extension" value="do" />   <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->   <constant name="struts.serve.static.browserCache" value="false" />   <!-- 指定国际化资源文件的baseName为uploadFile-->   <constant name="struts.custom.i18n.resources" value="resource/uploadFile"></constant>   <!-- 解决乱码 -->   <constant name="struts.i18n.encoding" value="UTF-8" />   <!-- 指定允许上传的文件最大字节数。默认值是2097152(2M)   <constant name="struts.multipart.maxSize"value="2097152"/> -->   <!-- 设置上传文件的临时文件夹,默认使用javax.servlet.context.tempdir   <constant name="struts.multipart.saveDir "value="G:/testUpload" />-->       <package name="default"namespace="/" extends="struts-default">      <interceptors>         <!-- 定义同步请求的拦截器,可以做权限控制 -->             <interceptor name="synInterceptor"class="cslg.eeid.Interceptor.SynLoginInterceptor"></interceptor>           <!-- 异步操作Ajax调用Action配置,可以做权限控制 -->          <interceptor name="ajaxInterceptor" class="cslg.eeid.Interceptor.AjaxLoginInterceptor"></interceptor>           <interceptor-stack name="eeidSynStack">                 <interceptor-ref name="synInterceptor"/>                 <interceptor-ref name="defaultStack"/>          </interceptor-stack>          <interceptor-stack name="eeidAjaxStack">             <interceptor-ref name="ajaxInterceptor"/>                 <interceptor-ref name="defaultStack"/>          </interceptor-stack>      </interceptors>             <!-- 普通同步Action调用,使用配置进行页面跳转-->        <!-- 第一个参数指定action类型,第二个参数指定action中的方法 -->      <action name="syn_*_*" class="cslg.eeid.action.{1}Action"method="{2}">         <interceptor-ref name="eeidSynStack" />          <result>${target}</result>         <!-- 在拦截器中无法调用baseAction的setTarget方法,所以需要重新定义返回 -->          <result name="login">/login.jsp</result>         <result name="message">/WEB-INF/page/message.jsp</result>      </action>           <!-- 异步操作Ajax调用Action配置 -->        <!-- 采用传统方式在Action中返回JSON数据,通过Json插件生成Json数据,以流的方式返回给js-->      <action name="ajax_*_*" class="cslg.eeid.action.{1}Action"method="{2}" >          <!-- 此时没有用到struts2默认方式返回JSON,所以没有 type="json";extends="json-default" 等配置-->          <!--<result type="json" > <param name="root">rows</param> </result> -->          <!-- 此处不需要定义视图 -->          <!-- 在拦截器中需要跳转到指定页面,所以需要重新定义返回 -->           <result name="message">/WEB-INF/page/message.jsp</result>          <!-- 使用此拦截器 -->             <interceptor-ref name="eeidAjaxStack"/>        </action>       <!-- 用于处理文件上传Action配置 -->       <action name="upload"class="cslg.eeid.action.FileUploadAction" method="uploadFile">            <result name="success">/WEB-INF/page/upload.jsp</result>            <result name="input">/WEB-INF/page/upload.jsp</result>            <result name="message">/WEB-INF/page/message.jsp</result>            <interceptor-ref name="fileUpload">                <!-- 文件过滤,允许后缀名为png,bmp,jpg,doc,xls,xlsx的文件上传 -->                <param name="allowedExtensions">                 png,bmp,jpg,doc,xls,xlsx            </param>                <!-- 文件大小, 以字节为单位 -->                <param name="maximumSize">10259560</param>            </interceptor-ref>            <!-- 默认拦截器必须放在fileUpload之后,否则无效 -->            <interceptor-ref name="eeidSynStack"/>        </action>    </package>    <!-- 异步操作Ajax调用Action配置,可以做权限控制 -->    <!-- 采用传统方式在Action中返回JSON数据,通过Json插件生成Json数据,以流的方式返回给js    <package name="ajax-default"namespace="/" extends="struts-default">      定义异步请求的拦截器          <interceptors>             <interceptorname="authority"class="cslg.eeid.Util.AjaxLoginInterceptor">             </interceptor>               拦截器栈            <interceptor-stackname="ajaxInterceptor">                 <interceptor-refname="defaultStack" />                 <interceptor-refname="authority" />             </interceptor-stack>         </interceptors>     </package>--></struts>

对应的LoginAction.java

public class LoginAction extendsBaseAction<User> {//……字段和相应的get和set方法//拼接用于构建树的数据源   publicvoidtreeMenu(){      String  menu = "[";      //权限为0的树节点信息        List<TreeMenu> parentList = userService.getParentList("0");        //如果没有父节点,退出         if(parentList.size()<1) return;        //遍历节点信息         for (int i = 0; i < parentList.size(); i++)         {           //得到节点信息,以JSON格式存储           menu += "{id:"+ "'"+parentList.get(i).getMenuID()+"'";             menu += ",text:" + "'"+parentList.get(i).getMenuDes()+"'";             menu += ",icon:" + "'"+parentList.get(i).getImg() + "'";             if(i==0)               menu += ",isExpand:true";//是否可以展开             String parentId =parentList.get(i).getMenuID();             List<TreeMenu> childMenuList= userService.getParentList(parentId);                          if (childMenuList.size() < 1) continue;              else{                menu += ",children:[";                   for (int j = 0; j < childMenuList.size(); j++)                   {                     menu += "{id:" + "'"+childMenuList.get(j).getMenuID()+"'";                       menu += ",text:"+ "'"+ childMenuList.get(j).getMenuDes() +"'";                       menu += ",url:"+ "'"+childMenuList.get(j).getUrl() +"'";                       menu += ",icon:"+ "'"+childMenuList.get(j).getImg() + "'";                       if(j != childMenuList.size()-1)                        menu += "},";                    else                      menu+= "}";                   }                   menu+="]}";              }             if(i!= parentList.size()-1)               menu += ",";          else             menu += "]";         }         String rows = menu;         System.out.println(rows);         //源码中要用rows,所以得到的数据赋给rows         renderJson (rows,"encoding:UTF-8");    }public String dispatcherMenu () throws Exception   {      @SuppressWarnings("unused")      StringserverRand =(String)ActionContext.getContext().getSession().get("rand");      //??动态跳转的jsp页面(menuUrl是页面提交上来的参数)      this.setTarget("/WEB-INF/page/" + menuUrl+".jsp");               return SUCCESS;}}

0 0