一、介绍<o:p></o:p>
Struts-menu是一个基于Struts框架的菜单生成应用框架,它是开源软件,可以从http://www.sourceforge.net上获得。Struts-menu在没有权限控制时最简单,只需配置文件就可以生成需要的菜单;在要菜单权限控制时,可以和Tomcat(或其他J2EE容器)的认证机制结合实现权限控制,也可以利用后台数据库的方式实现权限控制。<o:p></o:p>
从sourceforge.net获得Struts-menu后,将其解压,可以得到如下图1所示的一些文件:<o:p></o:p>
<v:shapetype o:spt="75" coordsize="21600,21600" stroked="f" id="_x0000_t75" filled="f" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path gradientshapeok="t" o:extrusionok="f" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape type="#_x0000_t75" id="_x0000_i1025" style="WIDTH: 142.5pt; HEIGHT: 134.25pt"><v:imagedata src="file:///C:\DOCUME~1\ZHIPEN~1\LOCALS~1\Temp\msohtml1\01\clip_image001.gif" o:title="1"></v:imagedata></v:shape><o:p></o:p>
其中struts-menu-2.3.jar为其核心包,struts-menu.tld为其对应的标签;struts-menu.war为Struts-menu自带的sample;doc目录下为帮助文档。<o:p></o:p>
<o:p> </o:p>
二、使用Struts-menu(无权限控制)<o:p></o:p>
1. 将struts-menu.jar拷贝到WEB-INF\lib目录下;<o:p></o:p>
2. 将struts-menu.tld拷贝到WEB-INF目录下;<o:p></o:p>
3. 将struts-menu.war中的scripts、styles、images目录拷贝到你的应用"/"目录下;<o:p></o:p>
4. 此外,Struts-menu需要Log4j的支持,因此需要将log4j的包也拷贝到WEB-INF/lib;<o:p></o:p>
5. 修改 web.xml 加入 taglib 的调用:<o:p></o:p>
<taglib><o:p></o:p>
<taglib-uri>/WEB-INF/struts-menu.tld</taglib-uri><o:p></o:p>
<taglib-location>/WEB-INF/struts-menu.tld</taglib-location><o:p></o:p>
</taglib><o:p></o:p>
6. 修改struts-config.xml,在其中添加如下plugin代码:<o:p></o:p>
<plug-in className="net.sf.navigator.menu.MenuPlugIn"><o:p></o:p>
<set-property property="menuConfig" value="/WEB-INF/menu-config.xml" /><o:p></o:p>
</plug-in><o:p></o:p>
7. 配置menu-config.xml(此文件位于WEB-INF目录下)<o:p></o:p>
<?xml version="1.0" encoding="UTF-8" ?><o:p></o:p>
<MenuConfig><o:p></o:p>
<Displayers><o:p></o:p>
<Displayer name="CoolMenu" type="net.sf.navigator.displayer.CoolMenuDisplayer"/><o:p></o:p>
<Displayer name="ListMenu" type="net.sf.navigator.displayer.ListMenuDisplayer"/><o:p></o:p>
<Displayer name="DropDown" type="net.sf.navigator.displayer.DropDownMenuDisplayer"/><o:p></o:p>
<Displayer name="Simple" type="net.sf.navigator.displayer.SimpleMenuDisplayer"/><o:p></o:p>
<Displayer name="CoolMenu4" type="net.sf.navigator.displayer.CoolMenuDisplayer4"/><o:p></o:p>
<Displayer name="MenuForm" type="net.sf.navigator.example.PermissionsFormMenuDisplayer"/><o:p></o:p>
<Displayer name="TabbedMenu" type="net.sf.navigator.displayer.TabbedMenuDisplayer"/><o:p></o:p>
<Displayer name="Velocity" type="net.sf.navigator.displayer.VelocityMenuDisplayer"/><o:p></o:p>
</Displayers><o:p></o:p>
<Menus><o:p></o:p>
<!-- ==================== To Do List Menus =========================== --><o:p></o:p>
<Menu name="ToDoListMenuFile" title="OPERATOR" description="this is a file menu test" width="50" ><o:p></o:p>
<Item name="TDLnew" title="ADMIN"><o:p></o:p>
<Item name="TDLnewcase" title="GO TO ADMIN PAGE" image="images/case-new.png" location="/webModule/admin/admin.jsp"/><o:p></o:p>
<Item name="TDLnewitem" title="NEW ITEM" image="images/item-new.png" location="index.jsp"/><o:p></o:p>
<Item name="TDLnewparty" title="NEW PARTY" image="images/party-new.png" location="index.jsp"/><o:p></o:p>
<Item name="TDLopen" title="OPEN"><o:p></o:p>
<Item name="TDLopencase" title="OPEN CASE" image="images/case-open.png" location="index.jsp"/><o:p></o:p>
<Item name="TDLopenitem" title="OPEN ITEM" image="images/item-open.png" location="index.jsp"/><o:p></o:p>
<Item name="TDLopenparty" title="OPEN PARTY" image="images/party-open.png" location="index.jsp"/><o:p></o:p>
</Item><o:p></o:p>
<Item name="TDLexit" title="EXIT" image="images/exit.png" location="index.jsp"/><o:p></o:p>
</Menu><o:p></o:p>
<!-- ==================== To Do List Menu Edit =========================== --><o:p></o:p>
<Menu name="ToDoListMenuEdit" title="EDIT"><o:p></o:p>
<Item name="TDLselect" title="SELECT_ALL" image="images/select-all.png" location="index.jsp" width="100"/><o:p></o:p>
<Item name="TDLprefs" title="USER_PREFERENCES" image="images/prefs.png" location="index.jsp" width="150"/><o:p></o:p>
</Menu><o:p></o:p>
<!-- ==================== Permissions Menu =========================== --><o:p></o:p>
<Menu name="Permissions" title="Permissions"><o:p></o:p>
<Item title="Change" location="permissionsForm.jsp?username='test'" /><o:p></o:p>
</Menu><o:p></o:p>
</Menus><o:p></o:p>
</MenuConfig><o:p></o:p>
注解:<o:p></o:p>
Ø <Displayers>与</Displayers>之间的代码定义了菜单的格式。<o:p></o:p>
Ø <Menus>与</Menus>之间的代码定义了要显示的菜单<o:p></o:p>
Ø <Menu>与<Menu>之间的代码具有定义一个菜单的各种属性,如:<o:p></o:p>
<Menu name="ToDoListMenuFile" title="OPERATOR" description="this is a file menu test" width="50" ><o:p></o:p>
其中name指定了在JSP页面上显示此菜单时使用的name,title属性定义了菜单的显示名称,description属性定义了当鼠标移动到此菜单上时显示的描述信息,width属性定义了此菜单所占的宽度。<o:p></o:p>
在<Menu>下的<Item/>标记用于定义此菜单的子项,如:<o:p></o:p>
<Item title="Change" location="permissionsForm.jsp?username='test'" /><o:p></o:p>
其中title为子项显示的名称,location为当点击此项时所要执行的操作,如此处当点击“Change”菜单时,它将转向permissionsForm.jsp页面。<o:p></o:p>
<o:p> </o:p>
8. 在JSP页面中加入如下代码:<o:p></o:p>
<o:p> </o:p>
<menu:useMenuDisplayer name="ListMenu" bundle="org.apache.struts.action.MESSAGE"><o:p></o:p>
<menu:displayMenu name="ToDoListMenuFile"/><o:p></o:p>
<menu:displayMenu name="ToDoListMenuEdit"/><o:p></o:p>
<menu:displayMenu name="Permissions"/><o:p></o:p>
</menu:useMenuDisplayer><o:p></o:p>
注解:<o:p></o:p>
Ø name属性指定要显示菜单的外观样式,由<Displayers></Displayers>中指定。<o:p></o:p>
Ø bundle为显示的菜单名称,必须为org.apache.struts.action.MESSAGE。<o:p></o:p>
Ø <menu:displayMenu />定义要显示的菜单,此处的name为要显示菜单的名称,由<Menu/>指定。<o:p></o:p>
此外,对于各种不同的菜单外观,需要引用其指定的CSS及JavaScript代码。<o:p></o:p>
效果如下图所示:<o:p></o:p>
<v:shape type="#_x0000_t75" id="_x0000_i1026" style="WIDTH: 228pt; HEIGHT: 250.5pt"><v:imagedata src="file:///C:\DOCUME~1\ZHIPEN~1\LOCALS~1\Temp\msohtml1\01\clip_image002.gif" o:title="2"></v:imagedata></v:shape><v:shape type="#_x0000_t75" id="_x0000_i1027" style="WIDTH: 159pt; HEIGHT: 2in"><v:imagedata src="file:///C:\DOCUME~1\ZHIPEN~1\LOCALS~1\Temp\msohtml1\01\clip_image003.gif" o:title="4"></v:imagedata></v:shape><v:shape type="#_x0000_t75" id="_x0000_i1028" style="WIDTH: 393pt; HEIGHT: 276.75pt"><v:imagedata src="file:///C:\DOCUME~1\ZHIPEN~1\LOCALS~1\Temp\msohtml1\01\clip_image004.gif" o:title="3"></v:imagedata></v:shape><o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
三、基于Tomcat的权限控制的菜单显示<o:p></o:p>
在Struts中要启用基于容器的安全认证:<o:p></o:p>
1. 需要在web.xml中进行配置(请参考Struts相关书籍):<o:p></o:p>
<security-constraint><o:p></o:p>
<web-resource-collection><o:p></o:p>
<web-resource-name>AdminPages</web-resource-name><o:p></o:p>
<description>Administroat only access</description><o:p></o:p>
<url-pattern>/security.jsp</url-pattern><o:p></o:p>
<http-method>POST</http-method><o:p></o:p>
<http-method>GET</http-method><o:p></o:p>
</web-resource-collection><o:p></o:p>
<auth-constraint><o:p></o:p>
<role-name>tomcat</role-name><o:p></o:p>
<role-name>role1</role-name><o:p></o:p>
<role-name>admin</role-name><o:p></o:p>
</auth-constraint><o:p></o:p>
</security-constraint><o:p></o:p>
<login-config><o:p></o:p>
<auth-method>BASIC</auth-method><o:p></o:p>
<realm-name>adminRealm</realm-name><o:p></o:p>
</login-config><o:p></o:p>
<security-role><o:p></o:p>
<description>Administrator</description><o:p></o:p>
<role-name>tomcat</role-name><o:p></o:p>
</security-role><o:p></o:p>
<security-role><o:p></o:p>
<description>A Second Role (to prove a comma-delimited list works)</description><o:p></o:p>
分享到:
相关推荐
5. **使用`struts-menu`标签**:在JSP页面中,使用`struts-menu`提供的标签来渲染菜单。这些标签会根据配置的数据源生成HTML代码。 6. **注意事项**:集成过程中可能会遇到的问题包括版本兼容性、资源加载问题、...
Struts-menu是一个专门为...- 文档:可能包含使用指南和API文档,帮助理解如何操作和定制Struts-menu。 通过深入研究这些文件,你可以学习到如何在自己的Struts项目中有效地利用Struts-menu,提升权限管理的水平。
2. **文档**:可能包含API文档、用户指南或开发者手册,这些文档会解释如何配置和使用Struts Menu,以及各种功能的用法。 3. **示例项目**:可能会包含一些演示应用,用于展示Struts Menu的功能,帮助开发者快速...
3. **引入EL表达式支持**:针对StrutsMenu 2.1版本,若要在`menu-config.xml`中使用EL表达式,还需添加Jakarta Standard Tag Library JAR至`WEB-INF/lib`目录。 #### 配置菜单属性 在`menu-config.xml`中定义菜单...
本用户指南将深入解析Struts Menu的功能、配置和使用方法,帮助开发者更好地理解和应用这一工具。 一、Struts Menu概述 Struts Menu是Apache Struts框架的一个扩展,它提供了一种简便的方式来创建和管理网页应用的...
对于那些希望利用Struts2和Tiles2来构建高效、可维护的Web应用的开发者来说,本文提供了宝贵的实践指南。 #### 二、Struts-2.1.6与Tiles2整合的意义 - **统一页面布局管理**:Tiles2作为一个模板引擎,能够帮助...
其次,《Struts Menu用户指南.doc》提供了使用StrutsMenu的基本步骤和最佳实践。这可能包括如何在Struts配置文件中声明MenuAction,如何在JSP中嵌入菜单标签,以及如何配置权限数据源。用户指南还会介绍如何配置菜单...
8. **Struts插件和扩展**:介绍 strutstags、struts-menu、struts-mailreader等插件的使用,以及如何自定义扩展。 9. **Struts与Spring、Hibernate整合**:展示如何将Struts与其他流行框架如Spring和Hibernate集成...
最后,"appfuse环境的配置及display、strutsMenu的使用.ppt"很可能是一个演示文稿,图文并茂地展示了如何设置AppFuse环境,以及如何实际使用DisplayTag和StrutsMenu。 为了更好地利用这些资源,开发者应先了解...
通过定义页面的布局结构(如header、footer、menu和body),可以实现页面组件的重用和动态组合,显著提升页面开发效率和代码的整洁度。 4. **异常处理** - Struts提供了灵活的异常处理机制。通过配置文件指定异常...
- **标签库**:使用StrutsMenu提供的JSP标签来在页面上渲染菜单,例如`<s:menu>`。 - **动态菜单**:基于用户登录信息和角色权限,StrutsMenu能够动态生成菜单项,隐藏无权限访问的链接。 - **模板定制**:可以...
它包含了诸如 Hibernate、ibatis、Struts、Spring、DBUnit、Ant、Log4J、Struts Menu、Xdoclet、SiteMesh、OSCache、JUnit 和 JSTL 等组件。这些工具和框架被精心集成到一起,以便为开发者提供一套完整的开发解决...
E3.Tree是一个在E3平台上构建树形UI(如菜单、树、外挂栏等)的组件。这个组件的特点在于其部署简便,...通过阅读E3.Tree的参考手册,可以获取更详细的使用指南和API文档,以帮助你更好地理解和运用E3.Tree的各种功能。
该工具包由Matt Raible创建,他在网络开发领域拥有丰富的经验,并且是多个开源项目的贡献者,包括Roller Weblogger、XDoclet、StrutsMenu、DisplayTag等。此外,他还参与了J2EE 5.0和JSF 1.2标准的制定,并撰写了...
1. **基础程序框架**:AppFuse提供了基于Ant、XDoclet、Spring、Hibernate或iBATIS的项目模板,同时也支持Junit、Cactus、StrutsTestCase、WebTest、Struts Menu、Display Tag Library、OSCach和JSTL以及Struts或...
1用TreeView加VS做动态树形菜单(带节点互斥).rar 2展开收缩带效果的演示 3.net的树形菜单 4AJAX实现的树形菜单 5二级树形菜单示例:CSS+TreeMenu.htm<br>6Treeview演示及使用指南 7struts+...