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

本文介绍如何在Struts项目中集成Struts-menu插件,实现菜单功能,并通过两种方式实现权限控制:一种是通过配置文件静态实现,另一种是通过数据库动态构建菜单并进行权限验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Struts 作为表示层框架的应用中,我们可以使用其众多的 Struts plug-ins 来丰富其功能。大家使用比较多的是使用 Struts-Tiles Struts-Validator ,这里我给大家介绍一下 Struts-menu ,很好用,在没有权限控制时最简单,只需配置文件就可以了;在要菜单权限控制时,可以和 Tomcat (或其他 J2EE 容器)的认证机制结合实现权限控制,也可以利用后台数据库的方式实现权限控制,这里主要介绍数据库方式,比较灵活,本人一直以为容器验证的方式太死板,不易扩充。

Struts-menu
sourceforge 的一个项目,可以直接到 sourceforge.net 下载。下面介绍一下在 Struts 项目中如何集成 Struts-menu

方式一:先介绍没有权限控制的方式使用:

1
、将 /lib/struts-menu.jar 拷贝到 WEB-INF/lib/ 目录下;

2
、将 /lib/struts-menu.tld 拷贝到 WEB-INF/lib/ 目录下;

3
、将 struts-menu.war 中的 scripts styles images 目录拷贝到你的应用 "/" 目录下;

4
、修改 web.xml 加入 taglib 的调用。
/WEB-INF/struts-menu.tld
/WEB-INF/struts-menu.tld


5
、修改 struts-config.xml 加入 plugin 描述

6
、配置 menu-config.xml ,如:
type="net.sf.navigator.
displayer.DropDownMenuDisplayer"/>
type="net.sf.navigator.
displayer.SimpleMenuDisplayer"/>
type="net.sf.navigator.
displayer.CoolMenuDisplayer"/>
type="net.sf.navigator.
displayer.CoolMenuDisplayer4"/>
type="net.sf.navigator.
example.PermissionsFormMenuDisplayer"/>
type="net.sf.navigator.
displayer.ListMenuDisplayer"/>
type="net.sf.navigator.
displayer.TabbedMenuDisplayer"/>
type="net.sf.navigator.
displayer.VelocityMenuDisplayer"/>
toolTip="Shows usage of the
menu displayers using defaults."
page="/menutest1.jsp"/>
toolTip="Shows customized 
menu displays."
page="/menutest2.jsp"/>
toolTip="Shows menu using
CoolMenu3"
page="/coolmenu1.jsp"/>
toolTip="Shows menu using
CoolMenu3 with forms."
page="/coolmenu2.jsp"/>
toolTip="Example use of menu
disable and permission checking
with CoolMenus."
page="/permissionsForm.jsp"/>
toolTip="Shows menu using CoolMenu4"
page="/coolmenu4.jsp"/>
toolTip="Shows Expandable DHTML list"
page="/dhtmlExpandable.jsp"/>
toolTip="Shows Dropdown DHTML list"
page="/dhtmlDropdown.jsp"/>


说明:断描述了 Strut-menu 将采用的显示方式,可以在 jsp 文件中选择 Displayer ;进行了相关菜单项目的配置,可以在 jsp 文件中选择显示的菜单。

7
、在 jsp 文件(如 Struts-tiles 中使用了 menu.jsp )中加入,可以通过对 useMenuDisplayer 来设置菜单的显示风格。

8
、可以在浏览其中显示了。

方式二:数据库验证方式

基本配置与方式一一致,只是在 JSP 中动态构建 Menus

采用数据库验证的方式,后台数据与你的其他数据库验证菜单类似。下面的示例代码中假设从后台数据中得到权限列表 ArrayList res ,我下面的示例中的 res 是在 Action 中传入的 SQLExecutor 的结果 SQLResults (其实就是 ArrayList ); Import Struts 的类库: net.sf.navigator.menu.* 。菜单显示部分如下:
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());
 
for (int i=0; i < res.getRowCount();
i++) 
{
MenuComponent mc = new MenuComponent();
String name = res.getString(i, "name");
mc.setName(name);
String parent = 
res.getString(i,"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);
} else {
topMenuList.add(name);
}
String title = (String)
res.getString(i,"title");
mc.setTitle(title);
String location = (String)
res.getString(i,"location");
mc.setLocation(location);
repository.addMenu(mc);
}
pageContext.setAttribute
("repository", repository);


这样的调用,详细用法可以参考 Struts-menu ,当然有兴趣的朋友可以把以上代码包装成特定的 Javabeans ,方便灵活调用。

玩了一阵 struts-menu, 总体感觉他的 xml 配置和权限处理,是我最喜欢的部分。但是他在页面展示上不够灵活,这是他的缺点。

这里推荐一个简单配置权限的方式。就是在楼主介绍的方法一的基础上,利用 struts-menu adpater 的概念,只要在 jsp 上加上如下代码:
<%
try {
DropDownPermissionAdapter adapter = new DropDownPermissionAdapter(request);
IMenuBO menuBO = new MenuBO();
TreeSet menuTree = 
menuBO.getAllowedMenuList("hello");
adapter.initializeMenu(menuTree);
request.getSession()
.getServletContext().setAttribute(
"AtdMenuAdapter", adapter);
}catch(Exception e)
{
e.printStackTrace() ;
}
%>
<menu:useMenuDisplayer 
name="TestDropDownDisplayer"
bundle="org.apache.struts.action.MESSAGE"
permissions="AtdMenuAdapter">
<menu:displayMenu name="01"/>
</menu:useMenuDisplayer>


其中 MenuBO 取出的是权限允许的菜单名字。

DropDownPermissionAdapter
实现了如下:
public class DropDownPermissionAdapter 
implements PermissionsAdapter
{
protected TreeSet menuTree = null;
;
 
/**
* 菜单初始化的时候调用
* @throws Exception
*/
public void initializeMenu
(TreeSet ts) throws Exception
{
 
this.menuTree =ts;
}
 
public boolean isAllowed
(MenuComponent menu) 
{
 
if (menuTree == null ||
menuTree.contains(menu.getName())) 
{
return true;
}
else {
return false;
}
}
}

http://www.javabc.com/
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值