• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

在项目中使用Struts-menu

发布: 2007-6-08 17:26 | 作者: 网络转载 | 来源: 网络 | 查看: 348次 | 进入软件测试论坛讨论

领测软件测试网  如果你正在为设计权限系统而烦恼,可以看看下面的文章

在Struts项目中使用Struts-menu- -
  在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. 可以在浏览其中show啦!

方式二:数据库验证方式

  基本配置与方式一一致,只是在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;
}
}
}

 

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

TAG: struts 使用 项目 menu


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网