您的位置:首页 > 移动开发

appfuse中的菜单(struts menu)

2007-08-30 15:19 316 查看
应用中集成struts menu有三种方式:
1 如果应用中使用了struts,可以把struts menu做为一个struts插件,如下:
<plug-in className="net.sf.navigator.menu.MenuPlugIn">
<set-property property="menuConfig"
value="/WEB-INF/menu- config.xml"/>
</plug-in>
2 在web.xml中配置监听器,如下:
<listener>
<listener-class>net.sf.navigator.menu.MenuContextListener</listener-class>
</listener>
3 如果项目中使用到了spring,可以定义一个bean,如下:
<bean id="menu" class="net.sf.navigator.menu.MenuLoader">
<property name="menuConfig">
<value>/WEB-INF/menu-config.xml</value>
</property>
</bean>
在appfuse中使用的是第二种方式.
然后在/WEB-INF/下定义了menu-config.xml文件,内容如下:
<MenuConfig>
<Displayers>
<Displayer name="CoolMenu" type="net.sf.navigator.displayer.CoolMenuDisplayer4"/>
<Displayer name="ListMenu" type=" net.sf.navigator.displayer.ListMenuDisplayer"/>
</Displayers>
<Menus>
<Menu name="MainMenu" title="mainMenu.title" page="/mainMenu.html" width="90"/>
<Menu name="UserMenu" title="menu.user" description="User Menu"
page="/editProfile.html"/>
<Menu name="FileUpload" title="menu.selectFile" description="File Upload"
page="/selectFile.html"/>
<Menu name="AdminMenu" title="menu.admin" description="Admin Menu" roles="admin"
width="120">
<Item name="ViewUsers" title="menu.admin.users" page="/users.html"/>
<Item name="ReloadContext" title="menu.admin.reload " page="/reload.html"/>
<Item name="FlushCache" title="menu.flushCache" page="/flushCache.html"
roles="admin"/>
<Item name="Clickstream" title="menu.clickstream" page="/clickstreams.jsp"
roles="admin"/>
</Menu>
</Menus>
</MenuConfig>
Displayers中的displayer 定义了菜单的显示方式. CoolMenu和ListMenu.
Menus 下的Menu定义了具体的菜单.title是菜单的显示名字(是国际化配置文件中的key).page是与此菜单
项对应的url请求路径.roles表示显示此菜单用户应该具有的角色.上例表示只有admin这种角色的用户登
陆才会显示AdminMenu菜单.
在taglibs.jsp定义了struts menu 的tag:
<%@ taglib uri="http://struts-menu.sf.net/tag-el" prefix="menu" %>
在menu.jsp中是tag的具体使用,如下:
<menu:useMenuDisplayer name="CoolMenu" permissions="rolesAdapter">
<menu:displayMenu name="MainMenu"/>
<menu:displayMenu name="UserMenu"/>
<menu:displayMenu name="FileUpload"/>
<menu:displayMenu name="AdminMenu"/>
</menu:useMenuDisplayer>
在这个菜单中,通过userMenuDisplayer 标签的name制定了菜单的显示样式是"CoolMenu".permissions指
定了菜单的显示与否是通过 role来决定的.(在前面的menu-config.xml中指定了AdminMenu菜单只有admin
角色的才显示).struts menu的 role permission 是通过request.isUserInRole来判断是否显示菜
单.appfuse使用了acegi security框架,在用户登陆的时候采用了acegi security的基于form 的认证方式
.在 acegi的org.acegisecurity.wrapper.SecurityContextHolderAwareRequestWrapper 类中有如下方法
:
public boolean isUserInRole(String role) {
return isGranted(role);
}
所以使用了它就可以完成这项工作,acegi security 提供了对struts menu的 role permission的支持.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: