在
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">
</script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
转载请注明原文地址: https://ibbs.8miu.com/read-16501.html