您的位置:首页 > 编程语言 > Java开发

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

2007-01-31 16:22 736 查看
在Struts作为表示层框架的应用中,我们可以使用其众多的Strutsplug-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

[align=left]

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

6、配置menu-config.xml,如:[/align]

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="Showsusageofthe

menudisplayersusingdefaults."

page="/menutest1.jsp"/>

toolTip="Showscustomized

menudisplays."

page="/menutest2.jsp"/>

toolTip="Showsmenuusing

CoolMenu3"

page="/coolmenu1.jsp"/>

toolTip="Showsmenuusing

CoolMenu3withforms."

page="/coolmenu2.jsp"/>

toolTip="Exampleuseofmenu

disableandpermissionchecking

withCoolMenus."

page="/permissionsForm.jsp"/>

toolTip="ShowsmenuusingCoolMenu4"

page="/coolmenu4.jsp"/>

toolTip="ShowsExpandableDHTMLlist"

page="/dhtmlExpandable.jsp"/>

toolTip="ShowsDropdownDHTMLlist"

page="/dhtmlDropdown.jsp"/>

[align=left]

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

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

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

方式二:数据库验证方式

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

采用数据库验证的方式,后台数据与你的其他数据库验证菜单类似。下面的示例代码中假设从后台数据中得到权限列表ArrayList:res,我下面的示例中的res是在Action中传入的SQLExecutor的结果SQLResults(其实就是ArrayList);ImportStruts的类库:net.sf.navigator.menu.*。菜单显示部分如下:[/align]

MenuRepositoryrepository

=newMenuRepository();

//Gettherepositoryfrom

theapplicationscope-andcopythe

//DisplayerMappingsfromit.

MenuRepositorydefaultRepository

=(MenuRepository)

application.getAttribute

(MenuRepository.MENU_REPOSITORY_KEY);

repository.setDisplayers

(defaultRepository.getDisplayers());


for(inti=0;i<res.getRowCount();

i++)

{

MenuComponentmc=newMenuComponent();

Stringname=res.getString(i,"name");

mc.setName(name);

Stringparent=

res.getString(i,"parent_name");

//System.out.println

(name+",parentis:"+parent);

if(parent!=null)

{

MenuComponentparentMenu

=repository.getMenu(parent);

if(parentMenu==null)

{

System.out.println

("parentMenu'"+parent+"

'doesn'texist!");

//createatemporaryparentMenu

parentMenu=newMenuComponent();

parentMenu.setName(parent);

repository.addMenu(parentMenu);

}

mc.setParent(parentMenu);

}else{

topMenuList.add(name);

}

Stringtitle=(String)

res.getString(i,"title");

mc.setTitle(title);

Stringlocation=(String)

res.getString(i,"location");

mc.setLocation(location);

repository.addMenu(mc);

}

pageContext.setAttribute

("repository",repository);

[align=left]

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

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

这里推荐一个简单配置权限的方式。就是在楼主介绍的方法一的基础上,利用struts-menuadpater的概念,只要在jsp上加上如下代码:[/align]

<%

try{

DropDownPermissionAdapteradapter=newDropDownPermissionAdapter(request);

IMenuBOmenuBO=newMenuBO();

TreeSetmenuTree=

menuBO.getAllowedMenuList("hello");

adapter.initializeMenu(menuTree);

request.getSession()

.getServletContext().setAttribute(

"AtdMenuAdapter",adapter);

}catch(Exceptione)

{

e.printStackTrace();

}

%>

<menu:useMenuDisplayer

name="TestDropDownDisplayer"

bundle="org.apache.struts.action.MESSAGE"

permissions="AtdMenuAdapter">

<menu:displayMenuname="01"/>

</menu:useMenuDisplayer>

[align=left]

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

DropDownPermissionAdapter实现了如下:[/align]

publicclassDropDownPermissionAdapter

implementsPermissionsAdapter

{

protectedTreeSetmenuTree=null;

;


/**

*菜单初始化的时候调用

*@throwsException

*/

publicvoidinitializeMenu

(TreeSetts)throwsException

{


this.menuTree=ts;

}


publicbooleanisAllowed

(MenuComponentmenu)

{


if(menuTree==null||

menuTree.contains(menu.getName()))

{

returntrue;

}

else{

returnfalse;

}

}

}

http://www.javabc.com/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: