公告
-
关注软件测试自动化,性能测试。
目前负责医疗软件功能测试以及
测试过程改进
日历
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
29 | 30 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|
统计
- 随笔 - 22
- 文章 - 0
- 评论 - 87
- 引用 - 0
导航
常用链接
留言簿(17)
随笔分类
随笔档案
搜索
最新评论
阅读排行榜
评论排行榜
|
原文作者:UPS Kylin项目小组
准备工作:
下载struts menu, 解压其中的示例包(struts-menu里面有些库没有提供,但示例里面有)
步骤
1,新建一个tomcat工程
2,添加webProject支持
3,增加struts支持
4,增加jstl支持
5, 拷贝必要的jar库文件到dbMenu\WEB-INF\lib
log4j-1.2.8.jar
velocity-1.4.jar
velocity-tools-view-1.0.jar
struts-menu-2.3.jar
6,创建menu-config.xml文件在dbMenu\WEB-INF目录。内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<MenuConfig>
<Displayers> <Displayer name="DropDown" type="net.sf.navigator.displayer.DropDownMenuDisplayer"/> <Displayer name="Simple" type="net.sf.navigator.displayer.SimpleMenuDisplayer"/> <Displayer name="CoolMenu" type="net.sf.navigator.displayer.CoolMenuDisplayer"/> <Displayer name="CoolMenu4" type="net.sf.navigator.displayer.CoolMenuDisplayer4"/> <Displayer name="MenuForm" type="net.sf.navigator.example.PermissionsFormMenuDisplayer"/> <Displayer name="ListMenu" type="net.sf.navigator.displayer.ListMenuDisplayer"/> <Displayer name="TabbedMenu" type="net.sf.navigator.displayer.TabbedMenuDisplayer"/> <Displayer name="Velocity" type="net.sf.navigator.displayer.VelocityMenuDisplayer"/> </Displayers> </MenuConfig>
7,修改struts-config.xml 文件,增加如下部分
<plug-in className="net.sf.navigator.menu.MenuPlugIn"> <set-property property="menuConfig" value="/WEB-INF/menu-config.xml"/> </plug-in>
8,拷贝必要的文件
Images/*.*
Scripts/ menuExpandable.js xtree.js
Styles/ menuExpandable.css global.css xtree.css
Templates/xtree.html
dbMenu\WEB-INF\classes\globalMacros.vm (这个文件好像必须要最后拷贝,否则会自动没了why???)
10, 拷贝tld文件到dbMenu\WEB-INF
struts-menu.tld struts-menu-el.tld
11, 不知道什么原因,需要修改web.xml文件中的version=2.3
<web-app version="2.3">
Web.xml中增加
<context-param> <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> <param-value>TrackerRes</param-value> </context-param>
11,创建数据库
仿造如下代码创建数据库
<sql:update> CREATE TABLE menu_item ( id BIGINT not null, parent_name VARCHAR(30), name VARCHAR(30), title VARCHAR(30), description VARCHAR(50), location VARCHAR(255), target VARCHAR(10), onclick VARCHAR(100), onmouseover VARCHAR(100), onmouseout VARCHAR(100), image VARCHAR(50), altImage VARCHAR(30), tooltip VARCHAR(100), roles VARCHAR(100), page VARCHAR(255), width VARCHAR(5), height VARCHAR(5), forward VARCHAR(50), action VARCHAR(50), primary key (id) ) </sql:update>
12,填写数据库
13,创建index.jsp文件
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="/WEB-INF/struts-menu.tld" prefix="menu" %> <%@ taglib uri="/WEB-INF/struts-menu-el.tld" prefix="menu-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> <%@ taglib uri="/WEB-INF/fmt.tld" prefix="fmt" %> <%@ taglib uri="/WEB-INF/sql.tld" prefix="sql" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<%@ page import="java.util.Map, javax.servlet.jsp.jstl.sql.Result, net.sf.navigator.menu.MenuComponent, net.sf.navigator.menu.MenuRepository"%> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>menu test</title> <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>
<sql:setDataSource driver="sun.jdbc.odbc.JdbcOdbcDriver" user="" password="" url="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\Program Files\\eclipse302\\workspace\dbMenu\\dm.mdb" var="mydb" />
<sql:transaction dataSource="${mydb}">
<sql:query var="menus"> SELECT * FROM dm order by id; </sql:query>
</sql:transaction> <% // I had issues using the existing repository - creating a new one // seems to solve the problem. If you figure out how to use the default // Repository and keep your menus from duplicating themselves - please // let me know!
MenuRepository repository = new MenuRepository(); // Get the repository from the application scope - and copy the // DisplayerMappings from it. MenuRepository defaultRepository = (MenuRepository) application.getAttribute(MenuRepository.MENU_REPOSITORY_KEY); repository.setDisplayers(defaultRepository.getDisplayers());
Result result = (Result) pageContext.getAttribute("menus"); Map[] rows = result.getRows(); for (int i=0; i < rows.length; i++) { MenuComponent mc = new MenuComponent(); Map row = rows[i]; String name = (String) row.get("name"); mc.setName(name); String parent = (String) row.get("parent_name"); System.out.println(name + ", parent is: " + parent); if (parent != null) { MenuComponent parentMenu = repository.getMenu(parent); if (parentMenu == null) { System.out.println("parentMenu '" + parent + "' doesn't exist!"); // create a temporary parentMenu 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); } pageContext.setAttribute("repository", repository); %>
menu test <hr>
<a href="tabbedMenu.jsp?home">static Tab Menu </a>
<hr>
<a href="dbtabbedMenu.jsp?home"> Database Driven Tab Menu </a>
<hr>
<a href="xmlForm.jsp"> static Xml Roles Menu </a>
<hr>
<a href="myRolesForm.jsp"> dababase driven Roles Menu </a>
<hr>
<h1>Database Driven Menu</h1>
<hr> <div class="dynamicMenu"> <menu:useMenuDisplayer name="ListMenu" repository="repository"> <menu:displayMenu name="DatabaseMenu"/> <menu:displayMenu name="StandaloneMenu"/> <menu:displayMenu name="niupi"/> </menu:useMenuDisplayer> </div> <hr> <div class="dynamicMenu tree"> <script type="text/javascript"> <menu:useMenuDisplayer name="Velocity" config="/templates/xtree.html" repository="repository"> <c:forEach var="menu" items="${repository.topMenus}"> <menu-el:displayMenu name="${menu.name}"/> </c:forEach> </menu:useMenuDisplayer> </script> </div> <hr>
</body> </html>
14,效果图:
上边部分是listview样式显示的效果
下边部分是xtree样式显示的效果
================================== 关于其中遇到的问题,如果你知道答案的话一定要告诉我哦^_^先谢谢啦
评论:
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-07-06 16:04
能把你的实例代码,和文件给我发一份吗????
c.tld fmt.tld sql.tld
谢谢拉
xiuyanzh@21cn.com 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-07-22 14:13
测试多次都没有成功,能得到你运行成功的代码吗
jdskyy@hotmail.com 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-08-04 17:35
henhao 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-08-06 09:43
dbMenu\WEB-INF\classes\globalMacros.vm (这个文件好像必须要最后拷贝,否则会自动没了why???)
================
原因是web-inf下的东西是经过编译构件后产生的,你源代码里面没有这个文件,而直接拷贝到该目录下,当重新编译的时候,系统会先删除该目录下的所有文件,然后再产生编译后的文件。
你可以拷贝该文件到源代码的根目录 ,这样编译后就会在web-inf\classes目录看到该文件啦:) 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-08-10 13:34
主人一点专业精神也没有,我照你说做了,根本不成功.错误的.
把你整个完整的工程,代码贴出来,证明一下啊.浪费我时间.
<menu:displayMenu name="DatabaseMenu"/>
错误信息是:
2005-08-10 13:29:37 net.sf.navigator.taglib.DisplayMenuTag[http-8080-Processor25] - No menu in repository with name: StandaloneMenu
要贴就贴对的出来,不要不负责任!!!!!! 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-08-14 16:52
我运行之后,总提示如下错误:不知这是为什么?
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: javax.servlet.jsp.JspException: Error initializing Velocity: org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'templates/xtree.html'
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:821)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.admin.left_jsp._jspService(left_jsp.java:108)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:298)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
edu.xxcb.jxpg.util.MyEncodingFilter.doFilter(MyEncodingFilter.java:26)
root cause
javax.servlet.jsp.JspException: Error initializing Velocity: org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'templates/xtree.html'
net.sf.navigator.displayer.VelocityMenuDisplayer.displayComponents(VelocityMenuDisplayer.java:128)
net.sf.navigator.displayer.VelocityMenuDisplayer.display(VelocityMenuDisplayer.java:99)
net.sf.navigator.taglib.DisplayMenuTag.doStartTag(DisplayMenuTag.java:130)
org.apache.jsp.admin.left_jsp._jspx_meth_menu_displayMenu_0(left_jsp.java:162)
org.apache.jsp.admin.left_jsp._jspx_meth_menu_useMenuDisplayer_0(left_jsp.java:133)
org.apache.jsp.admin.left_jsp._jspService(left_jsp.java:96)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:298)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
edu.xxcb.jxpg.util.MyEncodingFilter.doFilter(MyEncodingFilter.java:26)
root cause
org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'templates/xtree.html'
org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:458)
org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:341)
org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:831)
org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:813)
org.apache.velocity.runtime.RuntimeSingleton.getTemplate(RuntimeSingleton.java:285)
org.apache.velocity.app.Velocity.getTemplate(Velocity.java:469)
net.sf.navigator.displayer.VelocityMenuDisplayer.displayComponents(VelocityMenuDisplayer.java:124)
net.sf.navigator.displayer.VelocityMenuDisplayer.display(VelocityMenuDisplayer.java:99)
net.sf.navigator.taglib.DisplayMenuTag.doStartTag(DisplayMenuTag.java:130)
org.apache.jsp.admin.left_jsp._jspx_meth_menu_displayMenu_0(left_jsp.java:162)
org.apache.jsp.admin.left_jsp._jspx_meth_menu_useMenuDisplayer_0(left_jsp.java:133)
org.apache.jsp.admin.left_jsp._jspService(left_jsp.java:96)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:298)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
edu.xxcb.jxpg.util.MyEncodingFilter.doFilter(MyEncodingFilter.java:26)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.24 logs.
回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-08-15 17:30
在templats文件夹下面有一个名为xtree.html,其内容如下
## displayMenu is defined in WEB-INF/classes/globalMacros.vm
#macro( menuItem $menu $level )
## set title
#set ($title = $displayer.getMessage($menu.title))
#set ($node = $menu.name)
#if ($level == 0)
var $node = new WebFXTree('$title'#if($menu.url),'$!menu.url'#end);
#else
var $node = new WebFXTreeItem('$title'#if($menu.url),'$!menu.url'#end);
${menu.parent.name}.add($node);
#end
#end
#displayMenu($menu 0)
document.write($menu.name);
回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-08-15 23:45
虽然代码里有一些错误,但也不是你们说的那么严重
#错误一 :<sql:query var="menus">
SELECT * FROM dm order by id;
</sql:query>
应为 <sql:query var="menus">
SELECT * FROM menu_item order by id;
</sql:query>
最后大家要把数据源部分换成自己的数据库参数
<sql:setDataSource driver="sun.jdbc.odbc.JdbcOdbcDriver" user="" password=""
url="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\Program Files\\eclipse302\\workspace\dbMenu\\dm.mdb"
var="mydb" />
我运行了哈,呵呵,出来了! 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-08-16 21:31
sdfsfdsdf 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-08-16 21:32
错误信息是:
2005-08-10 13:29:37 net.sf.navigator.taglib.DisplayMenuTag[http-8080-Processor25] - No menu in repository with name: StandaloneMenu
这个信息是你表里没有StandaloneMenu 这个内容,楼主贴出来的表里的内容也得照填.我运行是运行了,但是不稳定.时好时坏,不知道怎么回事 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-08-21 11:30
请教楼主,为什么我的菜单好像根本不运行menuExpandable.js呢?
根本显示不出图片
另外汉字也显示不了!!
紧急求教!!!!!!!!!!!!!!!!!!
我的邮箱hanxb2001@163.com 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-08-21 11:37
我的开发环境是JBuilder2005,是在Struts中使用Struts-Menu的。
Struts-Menu.war应用拿到JBuilder2005中就运行就不正常!
现在是菜单出来了,但是不是可收缩、展开的,而是直接都展开,费了好几天劲也解决不了,求助各位兄弟!!!!!!
本人是个JavaScript盲,也不想学了,只要能够用就行了。
回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-09-08 13:53
效果图是蛮漂亮的,不过实现起来怎么这么复杂啊~~ 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-09-08 13:54
不知道用dtree是不是容易些 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-09-09 15:02
唉,失败,总是没有成功!
能不能把你的代码发到我邮箱?谢谢,兄弟!
zbwy1984@163.com 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-09-09 15:09
不好意思,偶也木用过,只是随便这么一说 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-11-04 10:00
其实代码只有一点小小的错误,我运行出来了,我把错误总结一下:
错误一: dbMenu\WEB-INF\classes\globalMacros.vm (这个文件好像必须要最后拷贝,否则会自动没了why???)
应该把globalMacros.vm文件放在src源文件的根目录下,放在classes目录下每次源文件编译的时候就会把globalMacros.vm文件删除掉,
错误二:<web-app version="2.3">
不需要加版本号,直接就是:<web-app>
错误三:
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
<%@ taglib uri="/WEB-INF/fmt.tld" prefix="fmt" %>
<%@ taglib uri="/WEB-INF/sql.tld" prefix="sql" %>
这几个tld文件好像不是最新的,最好是这样写
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql" %>
错误四:<sql:query var="menus">
SELECT * FROM dm order by id;
</sql:query>
应改为 <sql:query var="menus">
SELECT * FROM menu_item order by id;
</sql:query>
最后大家要把数据源部分换成自己的数据库参数
<sql:setDataSource driver="sun.jdbc.odbc.JdbcOdbcDriver" user="" password=""
url="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\Program Files\\eclipse302\\workspace\dbMenu\\dm.mdb"
var="mydb" />
注意:var只是一个数据库的别名而已。
<sql:transaction dataSource="${mydb}">
这里的dataSource="${mydb}"一定要与别人保持一致 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2005-12-24 00:25
拜托,这也算原创? 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2006-04-30 21:25
<c:forEach var="menu" items="${repository.topMenus}">
<menu-el:displayMenu name="${menu.name}"/>
</c:forEach>
这一句能否不用jstl实现。。。。 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2006-05-01 19:49
我也要一份啊!!!
我的邮箱是:li_fengjobs@163.com 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2006-05-25 16:01
错误都不是一样的.我这里运行错误是这样的
java.sql.SQLException: No suitable driver
搞了两天都没解决....气死我了...
还有一个就是dataSource="${mydb}"我这里这样写还提示有错,把$去掉才没提示有错.这是为何..<c:forEach var="menu" items="${repository.topMenus}">这里也是一样的..我真是不懂.本来想学学Struts-menu的,这样一弄,都不知道怎么做了,以前没用过.有人帮帮我吗.. 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2006-05-25 16:02
jdzywang@163.com我的邮箱,有人帮我的话请发到这里..
ありがとう 回复 更多评论
-
# 用struts
Posted @ 2008-01-10 19:44
我们公司也有用Struts的,我不是很懂,不过还好,做测试还能应付。 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2008-04-04 21:08
@davidy
你不要看就不浪费你时间啦,,, 看了还说风凉话!!! 回复 更多评论
-
# re: 使用struts-menu_详细(1)实现动态菜单
Posted @ 2014-07-17 15:56
中!国!共!产!党!万!岁 回复 更多评论
|