使用JSTL的SQL标记库,该标记库易用而且全面。本例子创建数据库表、插入数据,读取表中的数据并构建菜单。决定菜单在视图中的可见性的逻辑可以在Servlet 、Struts Action或Servlet Filter中实现,可以直接使用例子中的代码。
浏览dynamicMenu.jsp页面的内容,可以看到该页面中创建表并插入数据的代码。每次加载页面的时候,都会先删除表、再创建表,插入数据。
<sql:setDataSource var="db" url="jdbc:hsqldb:db/menu"
driver="org.hsqldb.jdbcDriver" user="sa" password=""/>
<sql:transaction dataSource="${db}">
<sql:update>
DROP TABLE menu_item IF EXISTS
</sql:update>
<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>
<sql:update var="updateCount">
INSERT INTO menu_item
(id, name, title)
VALUES
(1,'DatabaseMenu','Database Menu')
</sql:update>
<sql:update var="updateCount">
INSERT INTO menu_item
(id, parent_name, name, title, location)
VALUES
(2,'DatabaseMenu','Yahoo','Yahoo Mail','http://mail.yahoo.com')
</sql:update>
<sql:update var="updateCount">
INSERT INTO menu_item
(id, parent_name, name, title, location)
VALUES
(3,'DatabaseMenu','JavaBlogs','JavaBlogs','http://javablogs.com')
</sql:update>
<sql:update var="updateCount">
INSERT INTO menu_item
(id, name, title, location)
VALUES
(4,'StandaloneMenu','Standalone Menu','http://raibledesigns.com')
</sql:update>
<sql:query var="menus">
SELECT * FROM menu_item order by id;
</sql:query>
</sql:transaction>
现在开始使用这些数据构建菜单的定义。下面是构建菜单的代码。
在一个架构良好的应用中,使用Hibernate、iBATIS或JDBC从数据库中读取数据。然后,使用业务代表(Business Delegate)根据谁可以看到菜单,从ServletFilter、ServletContextListener或LoginServlet中调用相应的业务代表。
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:useMenuDisplayer name="ListMenu" repository="repository">
<menu:displayMenu name="DatabaseMenu"/>
<menu:displayMenu name="StandaloneMenu"/>
</menu:useMenuDisplayer>
也可以从菜单结构库中读取菜单的名字,并使用JSTL的<c:forEach>标记循环生成菜单:
<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>
分享到:
相关推荐
这个"基于数据库的struts-menu.rar"学习例子旨在教你如何在Struts框架中实现动态菜单,这些菜单数据是从数据库中获取的,而不是硬编码在程序中。这增加了应用的灵活性,使得管理员能够通过数据库来管理和更新菜单项...
Struts Menu是一款在Java Web开发中用于构建动态菜单的库,尤其在基于Struts框架的应用程序中非常常见。它能够帮助开发者从数据库中获取菜单结构,动态生成用户界面中的导航菜单,提供了一种灵活的方式来管理和展示...
Struts Menu 是一个基于 Apache Struts 框架的菜单管理组件,主要用于构建Web应用程序的动态导航菜单。这个组件能够帮助开发者轻松地管理和展示应用程序中的菜单结构,支持自定义样式和多级菜单,大大简化了在Struts...
Struts-Menu是一个基于Apache Struts框架的菜单生成库,它可以帮助开发者轻松地在Web应用中创建动态、可配置的菜单结构。这个实例教程将深入介绍如何使用Struts-Menu来构建用户界面的导航系统。 1. **Struts框架...
例如,StrutsMenu可能会有一个`MenuBuilder`类用于根据配置文件或数据库中的权限信息构建菜单树;还有可能涉及`MenuAction`,这是Struts中的一个Action,负责处理请求并返回相应的菜单视图。通过源码分析,开发者...
Struts-menu是一个基于Apache Struts框架的菜单管理组件,它为Web应用提供了动态生成和管理菜单的功能。在分析Struts-menu的源码时,我们可以深入理解Struts框架的工作原理、MVC模式的应用以及如何实现自定义标签库...
`struts-menu`是一个开源项目,用于生成基于JSP的动态菜单。它支持多种格式的数据源,如XML、数据库等,可以方便地与Struts2的Action和结果类型结合,为Web应用提供自定义的导航结构。集成`struts-menu`能够使开发者...
Struts是Java Web开发中的一个开源框架,它主要用于构建基于MVC(Model-View-Controller)模式的应用程序。在Struts框架中,Menu组件扮演着重要角色,它帮助开发者创建和管理应用程序的导航结构,为用户提供友好的...
在Struts-menu中,menu部分主要负责页面导航和菜单的生成,它与Struts的Action和ActionForm组件协同工作,提供了更方便的方式来管理和呈现网站的菜单结构。 Hibernate是一个强大的对象关系映射(ORM)框架,它简化...
Struts_Menu是一个基于Struts框架的菜单管理组件,它的源码提供了一个清晰的示例,帮助开发者理解如何在Web项目中集成和自定义菜单功能。本文将深入探讨Struts_Menu的核心概念、工作原理以及如何将其整合到Web项目中...
Struts-menu是一个开源项目,主要用于在基于Struts的Web应用程序中生成动态菜单。它提供了多种显示样式,并且可以根据用户权限进行动态控制。以下是对Struts-menu集成和使用的详细说明: 首先,集成Struts-menu需要...
在本项目中,我们探讨的是如何利用Struts2框架和AJAX技术动态地从数据库中获取数据,并生成交互式的树形菜单。树形菜单在Web应用中常见于导航系统,因为它能清晰地展示层次结构,方便用户浏览和操作。 首先,让我们...
使用Struts-menu-2.0时,开发者通常需要在Struts配置文件(struts.xml)中添加对应的插件配置,声明菜单的源(例如XML或数据库),以及定义菜单的样式和行为。菜单的结构可以通过XML文件来定义,这样可以方便地进行...
在这个Struts+Hibernate的实现中,菜单可能被设计为数据库中的实体,每个菜单项有其ID、名称、链接地址、父菜单ID等属性。使用Hibernate,我们可以方便地对菜单进行增删改查操作。而在Struts层面,可能会有一个专门...
3. **动态生成菜单**:当用户请求页面时,Struts-menu会根据用户的权限信息,动态生成用户可以访问的菜单项和按钮。未授权的菜单和按钮将不会显示在用户界面上,从而实现了权限控制。 4. **模板渲染**:Struts-menu...
在项目中,struts-menu会基于用户的角色和权限信息,生成仅包含用户有权访问的菜单,这样可以确保用户界面的简洁性和安全性。 最后,valuelist是实现信息分页的一种机制,它帮助在大量数据列表中分页展示结果,提升...
在实际开发中,这三部分的结合意味着开发者正在构建一个具有高效数据管理能力的J2EE应用,用户界面通过框架页面保持一致性和易用性,同时通过Struts Menu提供基于角色的动态菜单导航。这样的系统既满足了业务需求,...
1. **动态生成菜单**:基于角色和权限,Struts Menu可以从数据库或其他数据源动态地构建用户可见的菜单。这使得菜单可以根据用户的登录信息和权限进行个性化定制。 2. **易于配置**:通过XML配置文件或Action配置,...
在SSH(Spring、Struts和Hibernate)框架下,利用AJAX动态从数据库查询并加载菜单是一种常见的需求,尤其是在开发Web应用程序时,为了提供用户友好的交互体验。下面将详细讲解如何实现这一功能。 首先,我们需要...
在Struts2中,可以创建一个Action来获取当前用户的角色和权限,进而动态生成对应的菜单结构。 具体步骤可能如下: 1. 用户提交登录信息,Struts2 Action接收到请求。 2. Action调用Spring管理的Service层,Service...