﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-seasun-随笔分类-1.10 struts-menu</title><link>http://www.blogjava.net/shiwenfeng/category/42500.html</link><description>在不断模仿、思考、总结中一步一步进步！</description><language>zh-cn</language><lastBuildDate>Fri, 30 Oct 2009 09:27:34 GMT</lastBuildDate><pubDate>Fri, 30 Oct 2009 09:27:34 GMT</pubDate><ttl>60</ttl><item><title>初识struts-menu</title><link>http://www.blogjava.net/shiwenfeng/archive/2009/10/30/300384.html</link><dc:creator>shiwf</dc:creator><author>shiwf</author><pubDate>Fri, 30 Oct 2009 09:03:00 GMT</pubDate><guid>http://www.blogjava.net/shiwenfeng/archive/2009/10/30/300384.html</guid><wfw:comment>http://www.blogjava.net/shiwenfeng/comments/300384.html</wfw:comment><comments>http://www.blogjava.net/shiwenfeng/archive/2009/10/30/300384.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/shiwenfeng/comments/commentRss/300384.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shiwenfeng/services/trackbacks/300384.html</trackback:ping><description><![CDATA[<p>一、介绍<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Struts-menu是一个基于Struts框架的菜单生成应用框架，它是开源软件，可以从http://www.sourceforge.net上获&nbsp;得。Struts-menu在没有权限控制时最简单，只需配置文件就可以生成需要的菜单；在要菜单权限控制时，可以和Tomcat（或其他J2EE容器）的认证机制结合实现权限控制，也可以利用后台数据库的方式实现权限控制。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从sourceforge.net获得Struts-menu后，将其解压，可以得到如下图1所示的一些文件：</p>
<ol>
    <li>其中struts-menu-2.3.jar为其核心包，struts-menu.tld为其对应的标签；struts-menu.war为Struts-menu自带的sample；doc目录下为帮助文档。<br />
    <br />
    二、使用Struts-menu（无权限控制）<br />
    1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将struts-menu.jar拷贝到WEB-INFlib目录下；<br />
    2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将struts-menu.tld拷贝到WEB-INF目录下；<br />
    3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将struts-menu.war中的scripts、styles、images目录拷贝到你的应用"/"目录下；<br />
    4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此外，Struts-menu需要Log4j的支持，因此需要将log4j的包也拷贝到WEB-INF/lib；<br />
    5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改 web.xml 加入 taglib 的调用：<br />
    &lt;taglib&gt;<br />
    &nbsp;&nbsp;&nbsp; &lt;taglib-uri&gt;/WEB-INF/struts-menu.tld&lt;/taglib-uri&gt;<br />
    &nbsp;&nbsp;&nbsp; &lt;taglib-location&gt;/WEB-INF/struts-menu.tld&lt;/taglib-location&gt;<br />
    &lt;/taglib&gt;<br />
    6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改struts-config.xml，在其中添加如下plugin代码：<br />
    &lt;plug-in className="net.sf.navigator.menu.MenuPlugIn"&gt;<br />
    &nbsp;&nbsp;&nbsp; &lt;set-property property="menuConfig" value="/WEB-INF/menu-config.xml" /&gt;<br />
    &lt;/plug-in&gt;<br />
    7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 配置menu-config.xml（此文件位于WEB-INF目录下）<br />
    &lt;?xml version="1.0" encoding="UTF-8" ?&gt;<br />
    &lt;MenuConfig&gt;<br />
    &lt;Displayers&gt;<br />
    &lt;Displayer name="CoolMenu" type="net.sf.navigator.displayer.CoolMenuDisplayer"/&gt;<br />
    &lt;Displayer name="ListMenu" type="net.sf.navigator.displayer.ListMenuDisplayer"/&gt;<br />
    &lt;Displayer name="DropDown" type="net.sf.navigator.displayer.DropDownMenuDisplayer"/&gt;<br />
    &lt;Displayer name="Simple" type="net.sf.navigator.displayer.SimpleMenuDisplayer"/&gt;<br />
    &lt;Displayer name="CoolMenu4" type="net.sf.navigator.displayer.CoolMenuDisplayer4"/&gt;<br />
    &lt;Displayer name="MenuForm" type="net.sf.navigator.example.PermissionsFormMenuDisplayer"/&gt;<br />
    &lt;Displayer name="TabbedMenu" type="net.sf.navigator.displayer.TabbedMenuDisplayer"/&gt;<br />
    &lt;Displayer name="Velocity" type="net.sf.navigator.displayer.VelocityMenuDisplayer"/&gt;<br />
    &lt;/Displayers&gt;<br />
    &lt;Menus&gt;<br />
    &nbsp;&lt;!========&nbsp; To Do List Menus&nbsp;&nbsp; ==============&gt;<br />
    &nbsp; &lt;Menu name="ToDoListMenuFile" title="OPERATOR" description="this is a file menu test" width="50" &gt;<br />
    &nbsp;&nbsp;&nbsp; &lt;Item name="TDLnew" title="ADMIN"&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Item name="TDLnewcase" title="GO TO ADMIN PAGE" image="images/case-new.png" location="/webModule/admin/admin.jsp"/&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Item name="TDLnewitem" title="NEW ITEM" image="images/item-new.png" location="index.jsp"/&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Item name="TDLnewparty" title="NEW PARTY" image="images/party-new.png" location="index.jsp"/&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Item name="TDLopen" title="OPEN"&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp; &lt;Item name="TDLopencase" title="OPEN CASE" image="images/case-open.png" location="index.jsp"/&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Item name="TDLopenitem" title="OPEN ITEM" image="images/item-open.png" location="index.jsp"/&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Item name="TDLopenparty" title="OPEN PARTY" image="images/party-open.png" location="index.jsp"/&gt;<br />
    &nbsp;&nbsp;&nbsp; &lt;/Item&gt;<br />
    &nbsp;&nbsp;&nbsp; &lt;Item name="TDLexit" title="EXIT" image="images/exit.png" location="index.jsp"/&gt;<br />
    &nbsp; &lt;/Menu&gt;<br />
    &lt;! ===========&nbsp; To Do List Menu Edit&nbsp;&nbsp; =============&gt;<br />
    &nbsp; &lt;Menu name="ToDoListMenuEdit" title="EDIT"&gt;<br />
    &nbsp;&nbsp;&nbsp; &lt;Item name="TDLselect" title="SELECT_ALL" image="images/select-all.png" location="index.jsp" width="100"/&gt;<br />
    &nbsp;&nbsp;&nbsp; &lt;Item name="TDLprefs" title="USER_PREFERENCES" image="images/prefs.png" location="index.jsp" width="150"/&gt;<br />
    &nbsp; &lt;/Menu&gt;<br />
    &lt;!============&nbsp; Permissions Menu&nbsp;&nbsp; ==========&gt;<br />
    &nbsp; &lt;Menu&nbsp; name="Permissions" title="Permissions"&gt;<br />
    &nbsp;&nbsp;&nbsp; &lt;Item title="Change" location="permissionsForm.jsp?username='test'" /&gt;<br />
    &nbsp; &lt;/Menu&gt;<br />
    &lt;/Menus&gt;<br />
    &lt;/MenuConfig&gt;<br />
    &nbsp; 注解：<br />
    &nbsp;&lt;Displayers&gt;与&lt;/Displayers&gt;之间的代码定义了菜单的格式。<br />
    &lt;Menus&gt;与&lt;/Menus&gt;之间的代码定义了要显示的菜单<br />
    &lt;Menu&gt;与&lt;Menu&gt;之间的代码具有定义一个菜单的各种属性，如：<br />
    &lt;Menu name="ToDoListMenuFile" title="OPERATOR" description="this is a file menu test" width="50" &gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其中name指定了在JSP页面上显示此菜单时使用的name，title属性定义了菜单的显示名称，description属性定义了当鼠标移动到此菜单上时显示的描述信息，width属性定义了此菜单所占的宽度。<br />
    在&lt;Menu&gt;下的&lt;Item/&gt;标记用于定义此菜单的子项，如：<br />
    &lt;Item title="Change" location="permissionsForm.jsp?username='test'" /&gt;<br />
    其中title为子项显示的名称，location为当点击此项时所要执行的操作，如此处当点击&#8220;Change&#8221;菜单时，它将转向permissionsForm.jsp页面。<br />
    8.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在JSP页面中加入如下代码：<br />
    &lt;menu:useMenuDisplayer name="ListMenu"　bundle="org.apache.struts.action.MESSAGE"&gt;<br />
    &nbsp;&nbsp;&nbsp; &lt;menu:displayMenu name="ToDoListMenuFile"/&gt;<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;menu:displayMenu name="ToDoListMenuEdit"/&gt;<br />
    &nbsp;&nbsp;&nbsp; &lt;menu:displayMenu name="Permissions"/&gt;<br />
    &lt;/menu:useMenuDisplayer&gt;<br />
    注解：<br />
    name属性指定要显示菜单的外观样式，由&lt;Displayers&gt;&lt;/Displayers&gt;中指定。<br />
    bundle为显示的菜单名称，必须为org.apache.struts.action.MESSAGE。<br />
    &lt;menu:displayMenu /&gt;定义要显示的菜单，此处的name为要显示菜单的名称，由&lt;Menu/&gt;指定。<br />
    此外，对于各种不同的菜单外观，需要引用其指定的CSS及JavaScript代码。<br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 效果如下图所示： </li>
</ol>
<p>三、基于Tomcat的权限控制的菜单显示<br />
在Struts中要启用基于容器的安全认证：<br />
1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 需要在web.xml中进行配置（请参考Struts相关书籍）：<br />
&lt;security-constraint&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;web-resource-collection&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;web-resource-name&gt;AdminPages&lt;/web-resource-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;Administroat only access&lt;/description&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/security.jsp&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;http-method&gt;POST&lt;/http-method&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;http-method&gt;GET&lt;/http-method&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/web-resource-collection&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;auth-constraint&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;role-name&gt;tomcat&lt;/role-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;role-name&gt;role1&lt;/role-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;role-name&gt;admin&lt;/role-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/auth-constraint&gt;<br />
&nbsp; &lt;/security-constraint&gt;<br />
&nbsp; &lt;login-config&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;auth-method&gt;BASIC&lt;/auth-method&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;realm-name&gt;adminRealm&lt;/realm-name&gt;<br />
&nbsp; &lt;/login-config&gt;<br />
&nbsp; &lt;security-role&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;description&gt;Administrator&lt;/description&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;role-name&gt;tomcat&lt;/role-name&gt;<br />
&nbsp; &lt;/security-role&gt;<br />
&nbsp; &lt;security-role&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;description&gt;A Second Role (to prove a comma-delimited list works)&lt;/description&gt;</p>
<p><br />
<span style="color: #993300">本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/donkeyzheng/archive/2006/03/28/640821.aspx</span></p>
<img src ="http://www.blogjava.net/shiwenfeng/aggbug/300384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shiwenfeng/" target="_blank">shiwf</a> 2009-10-30 17:03 <a href="http://www.blogjava.net/shiwenfeng/archive/2009/10/30/300384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>