- Cecily
- 等级:


- 性别:
 - 文章: 93
- 积分: 144
- 来自: 大连

|
最近需要使用StrutsMenu显示动态菜单,菜单的相关信息保存在数据库表中,通过StrutsMenu读取数据库中的数据,进行动态显示。下面的操作可以显示一个基本的动态菜单,但心里总觉得没底,似乎实现的方法很笨的样子,希望大家能提供更好的实现方法.
实现过程如下,在Oracle数据库中建立了表menu-item,存贮了菜单的相关信息。表结构如下:
![表结构]()
表中用来定义菜单的数据如下:表中字段PARENT_NAME用来定义菜单的父级菜单,NAME字段为菜单的名字,title为菜单显示的标题。
![菜单数据]()
在JSP页面中,通过如下代码显示动态菜单,显示菜单所需要的包同《初涉StrutsMenu》中lib中所包含的包,在《初涉StrutsMenu》中中已经提供了下载。
- <%@ page contentType="text/html; charset=UTF-8" %>
- <%@ taglib uri="/WEB-INF/tld/struts-menu.tld" prefix="menu" %>
- <%@ taglib uri="/WEB-INF/tld/struts-menu-el.tld" prefix="menu-el" %>
- <%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %>
- <%@ taglib uri="/WEB-INF/tld/fmt.tld" prefix="fmt" %>
- <%@ taglib uri="/WEB-INF/tld/sql.tld" prefix="sql" %>
- <%@ page import="java.sql.*"%>
- <%@ page import="java.util.*" %>
- <%@ page import="bean.MyMenu" %>
-
-
- <%@ page import="java.util.Map,
- javax.servlet.jsp.jstl.sql.Result,
- net.sf.navigator.menu.MenuComponent,
- net.sf.navigator.menu.MenuRepository"%>
-
- <head>
- <title>menu testtitle>
-
- <link rel="stylesheet" type="text/css" media="screen" href="styles/global.css" />
- <link rel="stylesheet" type="text/css" media="screen" href="styles/menuExpandable.css"/>
- <script type="text/javascript" src="scripts/menuExpandable.js">script>
- <link rel="stylesheet" type="text/css" media="all" href="styles/xtree.css"/>
- <script type="text/javascript" src="scripts/xtree.js">script>
- <script type="text/javascript">
- /* Function for showing and hiding elements that use 'display:none' to hide */
- function toggleDisplay(targetId) {
- if (document.getElementById) {
- target = document.getElementById(targetId);
- if (target.style.display == "none"){
- target.style.display = "";
- } else {
- target.style.display = "none";
- }
- }
- }
- script>
- head>
- <body>
-
- <%
- ArrayList<Map> ary=new ArrayList<Map>();
- Connection con=null;
- try{
- Class.forName("oracle.jdbc.driver.OracleDriver");
- con=DriverManager.getConnection
-
- ("jdbc:oracle:thin:@127.0.0.1:1521:system","scott","tiger");
- }catch(Exception e){
- System.out.println("Error in index:"+e.getMessage());
- }
- Statement state=con.createStatement();
- ResultSet rs=state.executeQuery("SELECT id,parent_name,name,title,location FROM menu_item");
-
- while(rs.next()){
- Map temp=new HashMap();
- temp.put("id",rs.getString("id"));
- temp.put("name",rs.getString("name"));
- temp.put("parent_name",rs.getString("parent_name"));
- temp.put("title",rs.getString("title"));
- temp.put("location",rs.getString("location"));
- ary.add(temp);
- }
- request.setAttribute("menus",ary);
-
- MenuRepository repository = new MenuRepository();
- MenuRepository defaultRepository = (MenuRepository)
- application.getAttribute(MenuRepository.MENU_REPOSITORY_KEY);
- repository.setDisplayers(defaultRepository.getDisplayers());
- ArrayList result=(ArrayList)request.getAttribute("menus");
- Iterator iterator=result.iterator();
- int id=0;
- System.out.println("out while");
- while(iterator.hasNext()){
- MenuComponent mc = new MenuComponent();
- Map row=(Map)result.get(id);
- String name=(String)row.get("name");
- mc.setName(name);
- String parent=(String)row.get("parent_name");
- if (parent != null) {
- MenuComponent parentMenu = repository.getMenu(parent);
- if (parentMenu == null) {
- System.out.println("parentMenu '" + parent + "' doesn't exist!");
- parentMenu = new MenuComponent();
- parentMenu.setName(parent);
- repository.addMenu(parentMenu);
- }
-
- mc.setParent(parentMenu);
- }
-
- String title = (String) row.get("title");
- mc.setTitle(title);
- String location = (String) row.get("location");
- mc.setLocation(location);
- repository.addMenu(mc);
- iterator.next();
- id++;
- }
- pageContext.setAttribute("repository", repository);
- %>
-
-
- <div id="content">
- <script type="text/javascript" src="./scripts/coolmenus3.js">script>
- <script type="text/javascript" src="./scripts/coolmenu-config.js">script>
-
- <menu:useMenuDisplayer name="CoolMenu" config="/templates/coolmenus.html"
- repository="repository" bundle="org.apache.struts.action.MESSAGE">
- <c:forEach var="menu" items="${repository.topMenus}">
- <menu-el:displayMenu name="${menu.name}"/>
- c:forEach>
- menu:useMenuDisplayer>
- div>
- body>
- 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>
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
返回顶楼 |
|
|
- IvanLi
- 等级:


- 性别:
 - 文章: 301
- 积分: 867
- 来自: 北京

|
jsp里还有数据库链接密码?
|
返回顶楼 |
|
|
- Cecily
- 等级:


- 性别:
 - 文章: 93
- 积分: 144
- 来自: 大连

|
我只是做个简单的例子测试了一下,看菜单能不能出来,代码没有严格封装,数据库部分的内容是应该封装起来的,呵呵 ,不好意思,见笑了。
|
返回顶楼 |
|
|
- phoenix
- 等级: 初级会员

- 文章: 28
- 积分: 92

|
我在用coolmenu4时,如果最上层菜单过长会导致页面特别难看,我试着去修改相关的3个js文件,想通过传递变量来控制顶层菜单的个数,但是没有成功,不知道你是否遇到过这样的问题?
|
返回顶楼 |
|
|
- Cecily
- 等级:


- 性别:
 - 文章: 93
- 积分: 144
- 来自: 大连

|
我没有遇到过 ,但是我可以试着看一下 ,我还不是很清楚你说的是什么含义,我截个图给你,你看是不是这个样子的
|
返回顶楼 |
|
|
- Cecily
- 等级:


- 性别:
 - 文章: 93
- 积分: 144
- 来自: 大连

|
我用coolmenu看了一下 ,coolmenu-config.js中脚本可以调整菜单项之间的距离,合理调整的话,应该可以控制在页面的显示范围之内,coolmenu4我没有仔细看过,你看看应该也可以调整的吧.顶层菜单我没有见过换行的,所以我觉得肯定还得调整挤第一行里吧.
|
返回顶楼 |
|
|
- Cecily
- 等级:


- 性别:
 - 文章: 93
- 积分: 144
- 来自: 大连

|
菜单长了以后IE下方滚动条就出来了,后面会产生一些空隙 是这个问题么,其它的我没有发现什么不对劲啊 .
|
返回顶楼 |
|
|
- Cecily
- 等级:


- 性别:
 - 文章: 93
- 积分: 144
- 来自: 大连

|
我把coolmenu4也试了一下 ,没有发现什么问题,你还是把你的图片贴上来吧,你看这个截图,如果再加的话通过拉底部的滚动条也可以正常显示,所以我还是没有明白你说的 特别丑是因为什么原因,呵呵 还是图片比较说明问题.我还是把截图放附件中吧,这个Img设计的我不大明白呢呵呵。

- 描述: 效果图
- 大小: 737.5 KB
|
返回顶楼 |
|
|
- caryl
- 等级:


- 性别:
 - 文章: 216
- 积分: 286
- 来自: 北京

|
楼主,提醒下:你的图全是 file:///c:/menu.bmp 。。。
|
返回顶楼 |
|
|
- Cecily
- 等级:


- 性别:
 - 文章: 93
- 积分: 144
- 来自: 大连

|
谢谢提醒,修改了一下了
|
返回顶楼 |
|
|