`
Cecily
  • 浏览: 58277 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

Struts-Menu动态菜单

阅读更多
       最近需要使用StrutsMenu显示动态菜单,菜单的相关信息保存在数据库表中,通过StrutsMenu读取数据库中的数据,进行动态显示。下面的操作可以显示一个基本的动态菜单,但心里总觉得没底,似乎实现的方法很笨的样子,希望大家能提供更好的实现方法.
      实现过程如下,在Oracle数据库中建立了表menu-item,存贮了菜单的相关信息。表结构如下:
      表结构

表中用来定义菜单的数据如下:表中字段PARENT_NAME用来定义菜单的父级菜单,NAME字段为菜单的名字,title为菜单显示的标题。

菜单数据

     在JSP页面中,通过如下代码显示动态菜单,显示菜单所需要的包同《初涉StrutsMenu》中lib中所包含的包,在《初涉StrutsMenu》中中已经提供了下载。

  1. <%@ page contentType="text/html; charset=UTF-8" %>  
  2. <%@ taglib uri="/WEB-INF/tld/struts-menu.tld" prefix="menu" %>  
  3. <%@ taglib uri="/WEB-INF/tld/struts-menu-el.tld" prefix="menu-el" %>  
  4. <%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %>  
  5. <%@ taglib uri="/WEB-INF/tld/fmt.tld" prefix="fmt" %>  
  6. <%@ taglib uri="/WEB-INF/tld/sql.tld" prefix="sql" %>  
  7. <%@ page import="java.sql.*"%>  
  8. <%@ page import="java.util.*" %>  
  9. <%@ page import="bean.MyMenu" %>  
  10.   
  11.        
  12. <%@ page import="java.util.Map,   
  13.                  javax.servlet.jsp.jstl.sql.Result,   
  14.                  net.sf.navigator.menu.MenuComponent,   
  15.                  net.sf.navigator.menu.MenuRepository"%>  
  16.   
  17. <head>  
  18. <title>menu testtitle>  
  19.       
  20.     <link rel="stylesheet" type="text/css" media="screen" href="styles/global.css" />  
  21.     <link rel="stylesheet" type="text/css" media="screen" href="styles/menuExpandable.css"/>  
  22.     <script type="text/javascript" src="scripts/menuExpandable.js">script>  
  23.     <link rel="stylesheet" type="text/css" media="all"    href="styles/xtree.css"/>  
  24.     <script type="text/javascript" src="scripts/xtree.js">script>        
  25.     <script type="text/javascript">  
  26.         /* Function for showing and hiding elements that use 'display:none' to hide */   
  27.         function toggleDisplay(targetId) {   
  28.             if (document.getElementById) {   
  29.                 target = document.getElementById(targetId);   
  30.                 if (target.style.display == "none"){   
  31.                     target.style.display = "";   
  32.                 } else {   
  33.                     target.style.display = "none";   
  34.                 }   
  35.             }   
  36.         }   
  37.     script>  
  38.     head>  
  39. <body>  
  40.   
  41.     <%   
  42.         ArrayList<Map> ary=new ArrayList<Map>();   
  43.         Connection con=null;   
  44.         try{   
  45.             Class.forName("oracle.jdbc.driver.OracleDriver");   
  46.             con=DriverManager.getConnection   
  47.   
  48. ("jdbc:oracle:thin:@127.0.0.1:1521:system","scott","tiger");   
  49.         }catch(Exception e){   
  50.             System.out.println("Error in index:"+e.getMessage());   
  51.         }   
  52.         Statement state=con.createStatement();   
  53.         ResultSet rs=state.executeQuery("SELECT id,parent_name,name,title,location FROM menu_item");   
  54.            
  55.         while(rs.next()){   
  56.             Map temp=new HashMap();   
  57.             temp.put("id",rs.getString("id"));   
  58.             temp.put("name",rs.getString("name"));   
  59.             temp.put("parent_name",rs.getString("parent_name"));   
  60.             temp.put("title",rs.getString("title"));   
  61.             temp.put("location",rs.getString("location"));   
  62.             ary.add(temp);   
  63.         }   
  64.         request.setAttribute("menus",ary);   
  65.            
  66.         MenuRepository repository = new MenuRepository();   
  67.         MenuRepository defaultRepository = (MenuRepository)   
  68.                 application.getAttribute(MenuRepository.MENU_REPOSITORY_KEY);   
  69.         repository.setDisplayers(defaultRepository.getDisplayers());   
  70.         ArrayList result=(ArrayList)request.getAttribute("menus");   
  71.         Iterator iterator=result.iterator();   
  72.         int id=0;   
  73.         System.out.println("out while");   
  74.         while(iterator.hasNext()){   
  75.             MenuComponent mc = new MenuComponent();   
  76.             Map row=(Map)result.get(id);   
  77.             String name=(String)row.get("name");   
  78.             mc.setName(name);   
  79.             String parent=(String)row.get("parent_name");   
  80.              if (parent != null) {   
  81.                     MenuComponent parentMenu = repository.getMenu(parent);   
  82.                     if (parentMenu == null) {   
  83.                         System.out.println("parentMenu '" + parent + "' doesn't exist!");   
  84.                         parentMenu = new MenuComponent();   
  85.                         parentMenu.setName(parent);   
  86.                         repository.addMenu(parentMenu);   
  87.                     }   
  88.   
  89.                     mc.setParent(parentMenu);   
  90.                 }   
  91.                
  92.               String title = (String) row.get("title");   
  93.               mc.setTitle(title);   
  94.               String location = (String) row.get("location");   
  95.               mc.setLocation(location);   
  96.               repository.addMenu(mc);   
  97.               iterator.next();   
  98.               id++;   
  99.         }   
  100.         pageContext.setAttribute("repository", repository);   
  101.     %>  
  102.        
  103.        
  104.     <div id="content">  
  105.         <script type="text/javascript" src="./scripts/coolmenus3.js">script>  
  106.         <script type="text/javascript" src="./scripts/coolmenu-config.js">script>    
  107.     
  108.         <menu:useMenuDisplayer name="CoolMenu" config="/templates/coolmenus.html"  
  109.            repository="repository"  bundle="org.apache.struts.action.MESSAGE">  
  110.           <c:forEach var="menu" items="${repository.topMenus}">  
  111.             <menu-el:displayMenu name="${menu.name}"/>  
  112.           c:forEach>  
  113.         menu:useMenuDisplayer>  
  114.     div>  
  115. body>  
  116. html>  

显示效果如下:希望大家能提供更好的实现方式.

<v:shapetype id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" filled="f" stroked="f" coordsize="21600,21600" o:spt="75"> 效果图<v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" o:connecttype="rect" gradientshapeok="t"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype>

分享到:
评论
10 楼 xiezhendong 2007-05-22  
为什么我连图片都看不到,哪位老心人,能不能把源码全部发给我,邮箱:jsj_14_23@163.com
9 楼 Cecily 2007-01-19  
谢谢提醒,修改了一下了
8 楼 caryl 2007-01-19  
楼主,提醒下:你的图全是 file:///c:/menu.bmp 。。。
7 楼 Cecily 2007-01-19  
我把coolmenu4也试了一下 ,没有发现什么问题,你还是把你的图片贴上来吧,你看这个截图,如果再加的话通过拉底部的滚动条也可以正常显示,所以我还是没有明白你说的 特别丑是因为什么原因,呵呵 还是图片比较说明问题.我还是把截图放附件中吧,这个Img设计的我不大明白呢呵呵。
6 楼 Cecily 2007-01-19  
菜单长了以后IE下方滚动条就出来了,后面会产生一些空隙 是这个问题么,其它的我没有发现什么不对劲啊 .
5 楼 Cecily 2007-01-19  
我用coolmenu看了一下 ,coolmenu-config.js中脚本可以调整菜单项之间的距离,合理调整的话,应该可以控制在页面的显示范围之内,coolmenu4我没有仔细看过,你看看应该也可以调整的吧.顶层菜单我没有见过换行的,所以我觉得肯定还得调整挤第一行里吧.
4 楼 Cecily 2007-01-19  
我没有遇到过 ,但是我可以试着看一下 ,我还不是很清楚你说的是什么含义,我截个图给你,你看是不是这个样子的
3 楼 phoenix 2007-01-18  
我在用coolmenu4时,如果最上层菜单过长会导致页面特别难看,我试着去修改相关的3个js文件,想通过传递变量来控制顶层菜单的个数,但是没有成功,不知道你是否遇到过这样的问题?
2 楼 Cecily 2007-01-16  
我只是做个简单的例子测试了一下,看菜单能不能出来,代码没有严格封装,数据库部分的内容是应该封装起来的,呵呵 ,不好意思,见笑了。
1 楼 IvanLi 2007-01-16  
jsp里还有数据库链接密码?

相关推荐

    struts-menu文件

    Struts-menu是一个专门为Apache ...总之,Struts-menu为基于Struts的Web应用提供了强大的菜单管理功能,通过合理的配置和资源组织,可以创建出美观、易用且动态的菜单系统,极大地提高了开发效率和应用的用户体验。

    使用Struts-menu轻松实现网页菜单.doc

    如下拉菜单(`DropDownMenu`)、简单菜单(`SimpleMenu`)、酷炫菜单(`CoolMenu`)、权限表单菜单(`PermissionsFormMenu`)、列表菜单(`ListMenu`)、标签式菜单(`TabbedMenu`)、模板引擎驱动菜单(`...

    Struts-Menu实例教程

    Struts-Menu是一个基于Apache Struts框架的菜单生成库,它可以帮助开发者轻松地在Web应用中创建动态、可配置的菜单结构。这个实例教程将深入介绍如何使用Struts-Menu来构建用户界面的导航系统。 1. **Struts框架...

    struts-menu集成struts2.3.1例子以及注意的地方

    `struts-menu`是一个开源项目,用于生成基于JSP的动态菜单。它支持多种格式的数据源,如XML、数据库等,可以方便地与Struts2的Action和结果类型结合,为Web应用提供自定义的导航结构。集成`struts-menu`能够使开发者...

    struts-menu例子

    Struts-menu是一个基于Java的开源项目,用于在Struts框架中生成动态菜单。这个例子是Struts-menu的一个实例,提供给需要了解或使用Struts-menu的开发者参考。下面将详细介绍Struts-menu及其在实际开发中的应用,以及...

    struts-menu 人门 demo

    在Struts-menu中,menu部分主要负责页面导航和菜单的生成,它与Struts的Action和ActionForm组件协同工作,提供了更方便的方式来管理和呈现网站的菜单结构。 Hibernate是一个强大的对象关系映射(ORM)框架,它简化...

    Struts-menu例子加视频

    4. **动态菜单**:Struts-menu支持动态生成菜单,这意味着菜单内容可以根据用户角色、权限或业务状态动态变化。这在多用户、多权限的复杂应用中非常实用。 5. **视频教程**:“速动画教程第十四集.exe”和“.rtf”...

    项目开发过程中使用Struts-menu

    Struts-menu是一个开源项目,主要用于在基于Struts的Web应用程序中生成动态菜单。它提供了多种显示样式,并且可以根据用户权限进行动态控制。以下是对Struts-menu集成和使用的详细说明: 首先,集成Struts-menu需要...

    struts-menu-2.0

    Struts-menu-2.0是基于Apache Struts框架的一个扩展组件,主要用于构建Web应用程序的菜单系统。这个组件的出现,极大地简化了在Struts应用中创建动态、可配置的菜单的过程,使得开发者能够更加专注于业务逻辑,而...

    struts-menu实例

    在实际应用中,`strutsMenu`这个文件可能是整个实例的源码或者示例项目的打包文件。它可能包含了以下内容: - `struts-menu.xml`:配置文件,定义了菜单结构。 - `MenuAction.java`:可能是一个处理菜单逻辑的...

    struts-menu-2.4.jar

    struts-menu-2.4.jar,构建强大菜单

    struts-menu权限按钮(项目例子)

    3. **动态生成菜单**:当用户请求页面时,Struts-menu会根据用户的权限信息,动态生成用户可以访问的菜单项和按钮。未授权的菜单和按钮将不会显示在用户界面上,从而实现了权限控制。 4. **模板渲染**:Struts-menu...

    Struts-menu源码分析(转贴).rar

    Struts-menu是一个基于Apache Struts框架的菜单管理组件,它为Web应用提供了动态生成和管理菜单的功能。在分析Struts-menu的源码时,我们可以深入理解Struts框架的工作原理、MVC模式的应用以及如何实现自定义标签库...

    struts-menu

    2. **动态菜单生成**:Struts-menu能够根据用户的登录状态和权限动态生成菜单。例如,管理员可能看到所有功能的菜单项,而普通用户只能看到他们有权访问的部分。 3. **国际化支持**:Struts-menu支持多语言环境,...

    struts-menu-2.4.3-src

    在实际开发中,Struts Menu 提供了动态生成菜单的能力,可以根据用户的权限和应用状态自动生成相应菜单,这在多用户角色和复杂权限控制的系统中尤其有用。同时,它支持国际化,可以方便地适应不同语言环境。此外,...

    Struts-Menu.jar

    StrutsMenu是Struts的一个扩展,它的主要功能是自动生成Web应用的导航菜单,减轻开发者的负担,使他们可以更专注于业务逻辑。 在描述中提到了两个关键的文件: 1. struts-menu-2.4.3.jar:这是StrutsMenu的核心库...

    关于struts-menu的简单使用方法(静态的取XML的方式-转载)

    Struts-menu是一个在Java Web开发中用于生成动态菜单的开源组件,主要应用于基于Struts框架的应用程序。这个组件能够帮助开发者从XML配置文件中提取数据,生成用户界面的菜单结构,使得应用程序的导航部分更加灵活和...

    struts-menu动态生成菜单的实例,希望对初学者有作用

    NULL 博文链接:https://guoyangjie.iteye.com/blog/870582

    权限控制(struts2+hibernate+spring+struts-menu+valuelist)

    接下来,struts-menu是一个专门用于生成动态菜单的插件,它根据用户的权限动态生成显示的菜单项。在项目中,struts-menu会基于用户的角色和权限信息,生成仅包含用户有权访问的菜单,这样可以确保用户界面的简洁性和...

Global site tag (gtag.js) - Google Analytics