sql 代码
- 创建数据库表
- CREATE TABLE `menu_item` (
- `id` bigint(20) NOT NULL default '0',
- `parent_name` varchar(30) default NULL,
- `name` varchar(30) default NULL,
- `title` varchar(30) default NULL,
- `description` varchar(50) default NULL,
- `location` varchar(255) default NULL,
- `target` varchar(10) default NULL,
- `onclick` varchar(100) default NULL,
- `onmouseover` varchar(100) default NULL,
- `onmouseout` varchar(100) default NULL,
- `image` varchar(50) default NULL,
- `altImage` varchar(30) default NULL,
- `tooltip` varchar(100) default NULL,
- `roles` varchar(100) default NULL,
- `page` varchar(255) default NULL,
- `width` varchar(5) default NULL,
- `height` varchar(5) default NULL,
- `forward` varchar(50) default NULL,
- `action` varchar(50) default NULL,
- PRIMARY KEY (`id`)
- );
- INSERT INTO menu_item (id, name, title) VALUES (1,'DatabaseMenu','Database Menu');
- INSERT INTO menu_item (id, parent_name, name, title, location) VALUES (2,'DatabaseMenu','Yahoo','Yahoo Mail','http://mail.yahoo.com');
- INSERT INTO menu_item (id, parent_name, name, title, location) VALUES(3,'DatabaseMenu','JavaBlogs','JavaBlogs','http://javablogs.com');
- INSERT INTO menu_item (id, name, title, location) VALUES (4,'StandaloneMenu','Standalone Menu','http://raibledesigns.com');
struts-menu.tld<o:p></o:p>
struts-menu-el.tld<o:p></o:p>
menu-config.xml
放到 /WEB-INF/ 目录
struts-menu-2.3.jar<o:p></o:p>
velocity-1.4.jar<o:p></o:p>
velocity-tools-view-1.0.jar
<o:p>commons-lang-2.0.jar</o:p>
放到 /WEB-INF/lib/ 目录
globalMacros.vm放到 /src/ 目录
以上大多文件在下载的struts-menu里带了有
<o:p></o:p><o:p>
java 代码
- public class FindAction extends Action {
- public ActionForward execute(
- ActionMapping mapping,
- ActionForm form,
- HttpServletRequest request,
- HttpServletResponse response) {
- //创建
- Session session=HibernateSessionFactory.getSession();
- //创建事务
- Transaction tx=session.beginTransaction();
- //创建对话
- Query query=session.createQuery("FROM MenuItem m order by id");
- List list=query.list();
- //事务提交
- tx.commit();
- if(list.size()<0)
- return mapping.getInputForward();
- MenuRepository repository = new MenuRepository();
- HttpSession httpsession=(HttpSession)request.getSession();
- ServletContext application=(ServletContext)httpsession.getServletContext();
- MenuRepository defaultRepository = (MenuRepository)application.getAttribute(MenuRepository.MENU_REPOSITORY_KEY);
- repository.setDisplayers(defaultRepository.getDisplayers());
- for (int i=0; i < list.size(); i++) {
- MenuComponent mc = new MenuComponent();
- MenuItem mi=(MenuItem) list.get(i);
- String name = mi.getName();
- mc.setName(name);
- String parent = (String) mi.getParentName();
- 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)mi.getTitle();
- mc.setTitle(title);
- String location = (String) mi.getLocation();
- mc.setLocation(location);
- repository.addMenu(mc);
- }
- request.setAttribute("repository", repository);
- return mapping.findForward("okGo");
- }
- }
- <head>
- <title>Dynamic, Database-driven Menu</title>
- <link rel="stylesheet" type="text/css" media="all"
- href="<c:url value="/styles/menuExpandable.css"/>" />
- <script type="text/javascript"
- src="<c:url value="/scripts/menuExpandable.js"/>"></script>
- <link rel="stylesheet" type="text/css" media="all"
- href="<c:url value="/styles/xtree.css"/>" />
- <script type="text/javascript"
- src="<c:url value="/scripts/xtree.js"/>"></script>
- <link rel="stylesheet" type="text/css" media="all"
- href="<c:url value="/styles/global.css"/>" />
- <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>
- <div class="dynamicMenu">
- <menu:useMenuDisplayer name="ListMenu" repository="repository">
- <menu:displayMenu name="DatabaseMenu"/>
- <menu:displayMenu name="StandaloneMenu"/>
- </menu:useMenuDisplayer>
- </div>
- <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>
- </body>