1. Overview
Struts Menu應用是一個JSP標記的集合,支持從XML文件生成各種不同菜單系統。Struts Menu 2.0進行了重構,使用Velocity Templates定義菜單。
2. User Guide
2.1. 從1.x遷移到2.x
要從Struts Menu1.x升級到2.x,需要做如下改變:
l 修改標記庫聲明的URI,去掉“1.2”
<%@ taglib uri="http://struts-menu.sf.net/tag" prefix="menu" %>
l 修改<plug-in>,使用新的包名“net.sf.navigator”
<plug-in className="net.sf.navigator.menu.MenuPlugIn">
l 修改menu-config.xml文件,使用新的包名“net.sf.navigator”
<Displayer name="Simple" type="net.sf.navigator.displayer.SimpleMenuDisplayer"/>
2.2. 快速啟動
l 下載struts-menu分發包
l 解壓縮到本地目錄
l 下載并安裝Tomcat或其它Java Servlet容器
l 將struts-menu.war文件拷貝到Tomcat服務器的webapps目錄下,啟動服務器
l 瀏覽http://localhost:8080/struts-menu
2.3. 將Struts Menu集成到應用中
Struts Menu可以很方便得集成到Struts應用中,也將能夠集成到其它非struts的應用中。下面是繼承標記庫的步驟。
你所需要做的就是將struts-menu.jar文件拷貝到WEB-INF/lib目錄下,并在JSP頁面中使用標記的URI以聲明標記庫。
對于Struts Menu 2.1,還需要將Jakarta的Standard Tag Library Jar拷貝到WEB-INF/lib目錄下。
l 將struts-menu.jar文件拷貝到WEB-INF/lib目錄下
l 在struts-config.xml文件中添加<plug-in>設置
<plug-in className="net.sf.navigator.menu.MenuPlugIn">
<set-property property="menuConfig" value="/WEB-INF/menu-config.xml"/>
</plug-in>
l 在WEB-INF/menu-config.xml文件中聲明菜單屬性。下面是一個示例:
<Menu name="contactMenu" title="Contact" location="?Contact">
<Item name="email" title="E-Mail" location="?EMail"/>
<Item name="phone" title="Phone" location="?Phone"/>
</Menu>
詳細情況請參考例子應用的WEB-INF目錄下的menu-config.xml文件,并修改該文件以適應自己的應用。如果要了解所有相關屬性,請參考MenuBase類的標準文檔。
l 在JSP頁面中添加標記庫的聲明
<%@ taglib uri="http://struts-menu.sf.net/tag" prefix="menu" %>
l 在JSP頁面中添加標記庫代碼以生成菜單
<menu:useMenuDisplayer name="TabbedMenu"
bundle="org.apache.struts.action.MESSAGE">
<menu:displayMenu name="Home"/>
<menu:displayMenu name="About"/>
</menu:useMenuDisplayer>
其中,name="TabbedMenu"是在menu-config.xml文件中定義的。如下:
<Displayer name="TabbedMenu" type="net.sf.navigator.displayer.TabbedMenuDisplayer"/>
要使用可定制的Velocity模板生成菜單,需要將Velocity集成到web應用中。具體步驟如下:
l 確保menu-config.xml文件有如下定義:
<Displayer name="Velocity" type="net.sf.navigator.displayer.VelocityMenuDisplayer"/>
l 將Velocity的相關jar文件拷貝到WEB-INF/lib目錄下
l 將globalMacros.vm文件添加到WEB-INF/classes目錄下
l 在JSP頁面中,修改為name="Velocity",并將config屬性指到一個文件(如config="/templates/tabs.html"),如果文件在WEB-INF/classes目錄下,就是config="tabs.html"。
3. FAQ
3.1. 在使用菜單訪問JSP時拋出異常:
org.apache.jasper.JasperException: Could not obtain the menu repository
解決方法:
檢查struts-config.xml文件,確保添加如下plug-in設置
<plug-in className="net.sf.navigator.menu.MenuPlugIn">
<set-property property="menuConfig" value="/WEB-INF/menu-config.xml"/>
</plug-in>
<!-- The menuConfig property is an optional attribute. It is set to /WEB-INF/menu-config.xml by default. -->
3.2. 如何基于角色隱藏/顯示菜單項
先在JSP頁面中添加屬性permissions="rolesAdapter"到<menu:useMenuDisplayer>標記中;然后在menu-config.xml文件中加入允許看到此菜單項的角色列表,角色之間以逗號分隔。
3.3. 基于數據庫的動態菜單