当前位置: 首页 > 图文教程 > Java技术 > Web框架 > 浅谈项目开发过程中使用Struts-menu

Web框架
浅谈Ajax与Spring集成
浅谈Mock和基于Spring容器管理事务的测试
Hibernate中一级缓存与二级缓存
浅谈Hibernate的配置信息(一)
浅谈Hibernate的配置信息(二)
浅谈Spring中使用Quartz来执行计划任务
浅谈JFreeChart实时曲线(代码)
Ajax框架中选DWR还是A4J
浅谈Hibernate中关联问题
浅谈项目开发过程中使用Struts-menu
浅谈使用模板模式简化操作Hibernate
Hibernate中加载并存储对象
浅谈Hibernate依赖对象(Dependent objects)
浅谈Hibernate中自定义值类型
ORM那些事
51培训对Hibernate中的事务详解
51培训详谈Hibernate检索
详谈Struts2的核心概念(上)
详谈Struts2的核心概念(下)
浅谈应用dom4j操作xml文件

Web框架 中的 浅谈项目开发过程中使用Struts-menu


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-23   浏览: 100 ::
收藏到网摘: n/a

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

 

Struts-menusourceforge的一个项目,可以直接到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中的scriptsstylesimages目录拷贝到你的应用"/"目录下;

 

 

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

 

 

采用数据库验证的方式,后台数据与你的其他数据库验证菜单类似。下面的示例代码中假设从后台数据中得到权限列表ArrayListres,我下面的示例中的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;

}

}