日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

實(shí)戰(zhàn)Struts-Menu - 空間站 - BlogJava

 funronglei 2006-12-21
一、簡(jiǎn)介
  Struts-Menu是一組從基于XML的配置文件中生成多種樣式的菜單的JSP Tags,并且可以結(jié)合API開(kāi)發(fā)通過(guò)數(shù)據(jù)庫(kù)生成的動(dòng)態(tài)菜單。Struts-Menu支持國(guó)際化和多種權(quán)限控制。

二、運(yùn)行環(huán)境
  Windows 2000 Professional
  JDK 1.4.2_03
  Eclipse 3.1
  Tomcat 5.0.28
  Tomcat Plugin 3.1Beta
  Struts 1.2.7
  Commons-Lang 2.1
  Commons-Collections 3.1
  Struts-Menu 2.3
  MySQL 4.1.10a-nt

三、下載與安裝
  1:從http://java.下載J2SDK,當(dāng)前1.4.x系列的最新版本為1.4.2_08
  2:從http://www.下載Eclipse,當(dāng)前最新版本為3.1正式版
  3:從http://jakarta./tomcat下載Tomcat,當(dāng)前5.x系列的最新版本為5.0.28
  4:從http://www./eclipse/tomcatplugin下載Eclipse的Tomcat插件,對(duì)應(yīng)Eclipse3.1x的最新版本為3.1Beta
  5:從http://struts.下載Struts,當(dāng)前最新版本為1.2.7
  6:從http://jakarta./commons/下載Commons-Lang,當(dāng)前最新版本為2.1,下載Commons-Collections,當(dāng)前最新版本為3.1
  7:從http://struts-menu.下載Struts Menu,當(dāng)前最新版本為2.3
  8:從http://www.下載MySQL數(shù)據(jù)庫(kù),4.x系列的最新版本是4.1.12a
  9:MySQL、JDK、Eclipse、Tomcat和TomcatPlugin的安裝及配置請(qǐng)參考相關(guān)資料

四、運(yùn)行示例程序
  1:安裝好Tomcat后,解壓縮struts-menu-2.3.zip,將struts-menu.war釋放到Tomcat安裝目錄下的webapps下,運(yùn)行Tomcat
  2:在地址欄輸入http://localhost:8080/struts-menu

五、安裝與配置
  1:在Eclipse中新建Tomcat項(xiàng)目,Context為/mymenu,Subdirectory為/web
  2:在項(xiàng)目目錄下面新建lib目錄和web目錄及WEB-INF,在web/WEB-INF目錄下新建web.xml,內(nèi)容如下:


<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java./dtd/web-app_2_3.dtd"
>

<web-app>
  
<display-name>My Example Application -- Vinton Lee</display-name>
      
  
<!-- ============= The Struts ActionServlet Configuration ============= -->
  
<servlet>
    
<servlet-name>action</servlet-name>
    
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    
<init-param>
      
<param-name>config</param-name>
      
<param-value>/WEB-INF/struts-config.xml</param-value>
    
</init-param>
    
<load-on-startup>1</load-on-startup>
  
</servlet>
  
<!-- ================================================================== -->
    
  
<!-- ============= The Struts Action Servlet Mapping ================== -->
  
<servlet-mapping>
    
<servlet-name>action</servlet-name>
    
<url-pattern>*.do</url-pattern>
  
</servlet-mapping>
  
<!-- ================================================================== -->
  
  
<!-- The Welcome File List -->
  
<welcome-file-list>
    
<welcome-file>index.jsp</welcome-file>
  
</welcome-file-list>

  
<!-- =============== The Struts Taglib Definition ===================== -->
  
<taglib>
    
<taglib-uri>struts-bean</taglib-uri>
    
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
  
</taglib>
  
<taglib>
    
<taglib-uri>struts-html</taglib-uri>
    
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
  
</taglib>
  
<taglib>
    
<taglib-uri>struts-logic</taglib-uri>
    
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
  
</taglib>
  
<taglib>
    
<taglib-uri>struts-nested</taglib-uri>
    
<taglib-location>/WEB-INF/struts-nested.tld</taglib-location>
  
</taglib>
  
<taglib>
    
<taglib-uri>struts-tiles</taglib-uri>
    
<taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
  
</taglib>
  
<!-- ================================================================== -->
  
  
<!-- ============= The Struts-Menu Taglib Definition ================== -->
  
<taglib>
    
<taglib-uri>struts-menu</taglib-uri>
    
<taglib-location>/WEB-INF/struts-menu.tld</taglib-location>
  
</taglib>
  
<!-- ================================================================== -->
</web-app>

3:解壓縮struts-1.2.7.zip,將壓縮包中的lib目錄下所有的8個(gè)jar釋放到lib目錄中,將5個(gè)tld文件釋放到web\WEB-INF目錄中,在web\WEB-INF目錄中新建struts-config.xml,內(nèi)容如下:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://struts./dtds/struts-config_1_2.dtd"
>

<struts-config>

    
<!-- ========== Data Source Configuration =============================== -->
    
<data-sources />

    
<!-- ========== Form Bean Definitions =================================== -->
    
<form-beans />

    
<!-- ========== Global Exception Definitions ============================ -->
    
<global-exceptions />

    
<!-- ========== Global Forward Definitions ============================== -->
    
<global-forwards />

    
<!-- ========== Action Mapping Definitions ============================== -->
    
<action-mappings />

    
<!-- ========== Controller Configuration ================================ -->

    
<!-- ========== Message Resources Definitions =========================== -->
    
<message-resources parameter="application" />

    
<!-- ========== Plug Ins Configuration ================================== -->
    
<plug-in className="net.sf.navigator.menu.MenuPlugIn">
      
<set-property property="menuConfig" value="/WEB-INF/menu-config.xml"/>
    
</plug-in>

</struts-config>

4:解壓縮struts-menu-2.3.zip,將壓縮包中的jstl-1.0.6.jar、standard-1.0.6.jar、struts-menu-2.3.jar釋放到lib目錄中,將壓縮包中的struts-menu.tld、struts-menu-el.tld釋放到web\WEB-INF目錄中,解壓縮commons-lang-2.1.zip,將commons-lang-2.1.jar解壓縮到lib目錄中,注意,在Struts-Menu的文檔中沒(méi)有看到需要這個(gè)包,但是沒(méi)有這個(gè)包卻無(wú)法成功加載。在web\WEB-INF目錄中新建menu-config.xml,內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8" ?>

<MenuConfig>

  
<Displayers>
    
<Displayer   name="DropDown"
                 type
="net.sf.navigator.displayer.DropDownMenuDisplayer"/>
    
<Displayer   name="Simple"
                 type
="net.sf.navigator.displayer.SimpleMenuDisplayer"/>
    
<Displayer   name="CoolMenu"
                 type
="net.sf.navigator.displayer.CoolMenuDisplayer"/>
    
<Displayer   name="CoolMenu4"
                 type
="net.sf.navigator.displayer.CoolMenuDisplayer4"/>
    
<Displayer   name="MenuForm"
                 type
="net.sf.navigator.example.PermissionsFormMenuDisplayer"/>
    
<Displayer   name="ListMenu"
                 type
="net.sf.navigator.displayer.ListMenuDisplayer"/>
    
<Displayer   name="TabbedMenu"
                 type
="net.sf.navigator.displayer.TabbedMenuDisplayer"/>
    
<Displayer   name="Velocity"
                 type
="net.sf.navigator.displayer.VelocityMenuDisplayer"/>
  
</Displayers>

  
<Menus>
    
<Menu  name="DoorSite"  title="DoorSite"  description="Some famous doorsite" width="50">
       
<Item   name="Yahoo"   title="Yahoo">
           
<Item   name="YahooIndex"   title="Yahoo Index"   location="http://www."/>
           
<Item   name="YahooMail"    title="Yahoo Mail"    location="http://cn.mail.yahoo.com"/>
       
</Item>
       
<Item    name="Sohu"  title="Sohu"   location="http://www.sohu.com"/>
       
<Item    name="Sina"  title="Sina"   location="http://www.sina.com.cn"/>
    
</Menu>
  
</Menus>

</MenuConfig>

5:將第四步的示例程序中的struts-menu應(yīng)用目錄下的images、scripts、styles三個(gè)目錄中的內(nèi)容復(fù)制到web目錄下

  6:你的目錄結(jié)構(gòu)應(yīng)該類似如下:

%PROJECT_HOME%\classes
    %PROJECT_HOME%\lib
    %PROJECT_HOME%\lib\antlr.jar
    %PROJECT_HOME%\lib\commons-beanutils.jar
    %PROJECT_HOME%\lib\commons-digester.jar
    %PROJECT_HOME%\lib\commons-fileupload.jar
    %PROJECT_HOME%\lib\commons-lang-
2.1.jar
    %PROJECT_HOME%\lib\commons-logging.jar
    %PROJECT_HOME%\lib\commons-validator.jar
    %PROJECT_HOME%\lib\jakarta-oro.jar
    %PROJECT_HOME%\lib\jstl-
1.0.6.jar
    %PROJECT_HOME%\lib\standard-
1.0.6.jar
    %PROJECT_HOME%\lib\struts.jar
    %PROJECT_HOME%\lib\struts-menu-
2.3.jar
    %PROJECT_HOME%\src
    %PROJECT_HOME%\src\log4j.properties
    %PROJECT_HOME%\src\application.properties
    %PROJECT_HOME%\src\application_zh_CN.properties
    %PROJECT_HOME%\web
 %PROJECT_HOME%\web\images\
 %PROJECT_HOME%\web\scripts\
 %PROJECT_HOME%\web\styles\
    %PROJECT_HOME%\web\WEB-INF
    %PROJECT_HOME%\web\WEB-INF\menu-config.xml
    %PROJECT_HOME%\web\WEB-INF\struts-bean.tld
    %PROJECT_HOME%\web\WEB-INF\struts-config.xml
    %PROJECT_HOME%\web\WEB-INF\struts-html.tld
    %PROJECT_HOME%\web\WEB-INF\struts-logic.tld
    %PROJECT_HOME%\web\WEB-INF\struts-menu.tld
    %PROJECT_HOME%\web\WEB-INF\struts-menu-el.tld
    %PROJECT_HOME%\web\WEB-INF\struts-nested.tld
    %PROJECT_HOME%\web\WEB-INF\struts-tiles.tld
    %PROJECT_HOME%\web\WEB-INF\web.xml

六、實(shí)戰(zhàn)Struts-Menu
  1:使用配置文件實(shí)現(xiàn)靜態(tài)菜單
  新建JSP文件web/static-menu.jsp,內(nèi)容如下:

<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="struts-menu" prefix="menu" %>

<menu:useMenuDisplayer name="ListMenu" 
    bundle
="org.apache.struts.action.MESSAGE">
    
<menu:displayMenu name="DoorSite"/>
</menu:useMenuDisplayer>

運(yùn)行Tomcat,在IE地址欄輸入http://localhost:8080/mymenu/static-menu.jsp查看

2:實(shí)現(xiàn)中文化
  > 在src\application_zh_CN.properties中增加下面的內(nèi)容,Unicode可以通過(guò)JDK自帶的native2ascii工具得到:
#門(mén)戶網(wǎng)站
menu.DoorSite
=\u95e8\u6237\u7f51\u7ad9
#雅虎
menu.Yahoo
=\u96c5\u864e
#雅虎首頁(yè)
menu.YahooIndex
=\u96c5\u864e\u9996\u9875
#雅虎郵件
menu.YahooMail
=\u96c5\u864e\u90ae\u4ef6
#搜狐
menu.Sohu
=\u641c\u72d0
#新浪
menu.Sina
=\u65b0\u6d6a
> 在src\application.properties中增加下面的內(nèi)容:

#門(mén)戶網(wǎng)站
menu.DoorSite
=DoorSite
#雅虎
menu.Yahoo
=Yahoo
#雅虎首頁(yè)
menu.YahooIndex
=Yahoo Index
#雅虎郵件
menu.YahooMail
=Yahoo Mail
#搜狐
menu.Sohu
=Sohu
#新浪
menu.Sina
=Sina
> 修改menu-config.xml文件<Menus></Menus>部分:

<Menus>
    
<Menu  name="DoorSite"  title="menu.DoorSite"  description="Some famous doorsite" width="50">
       
<Item   name="Yahoo"   title="menu.Yahoo">
           
<Item   name="YahooIndex"   title="menu.YahooIndex"   location="http://www."/>
           
<Item   name="YahooMail"    title="menu.YahooMail"    location="http://cn.mail.yahoo.com"/>
       
</Item>
       
<Item    name="Sohu"  title="menu.Sohu"   location="http://www.sohu.com"/>
       
<Item    name="Sina"  title="menu.Sina"   location="http://www.sina.com.cn"/>
    
</Menu>
  
</Menus>
重起Tomcat,在IE地址欄輸入http://localhost:8080/mymenu/static-menu.jsp查看

  3:結(jié)合數(shù)據(jù)庫(kù)實(shí)現(xiàn)動(dòng)態(tài)菜單
  > 新建數(shù)據(jù)myexamples:
CREATE DATABASE myexamples
  > 新建數(shù)據(jù)庫(kù)表menu_item:

CREATE TABLE menu_item (
   id BIGINT not null
,
   parent_name VARCHAR(
30),
   name VARCHAR(
30),
   title VARCHAR(
30),
   titleCN VARCHAR(
30),
   description VARCHAR(
50),
   location VARCHAR(
255),
   target VARCHAR(
10),
   onclick VARCHAR(
100),
   onmouseover VARCHAR(
100),
   onmouseout VARCHAR(
100),
   image VARCHAR(
50),
   altImage VARCHAR(
30),
   tooltip VARCHAR(
100),
   roles VARCHAR(
100),
   page VARCHAR(
255),
   width VARCHAR(
5),
   height VARCHAR(
5),
   forward VARCHAR(
50),
   action VARCHAR(
50),
   primary key (id)
)


> 插入測(cè)試數(shù)據(jù):
INSERT INTO menu_item
    (id
, parent_name, name, title, titleCN, location)
VALUES
    (
1,null,‘DatabaseMenu‘,‘Database Menu‘,‘?dāng)?shù)據(jù)庫(kù)動(dòng)態(tài)菜單‘,null),
    (
2,‘DatabaseMenu‘,‘Yahoo‘,‘Yahoo Mail‘,‘雅虎郵件‘,‘http://mail.yahoo.com‘),
    (
3,‘DatabaseMenu‘,‘JavaBlogs‘,‘JavaBlogs‘,‘Java博客‘,‘http://‘),
    (
4,null,‘StandaloneMenu‘,‘Standalone Menu‘,‘獨(dú)立的菜單‘,‘http://www.sohu.com‘)
> 將數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序放到lib目錄中,并加入到Build Path,如MySQL的數(shù)據(jù)庫(kù)驅(qū)動(dòng)mysql-connector-java-3.1.8-bin.jar,解壓縮commons-collections-3.1.zip,將commons-collections-3.1.jar釋放到lib目錄,并加入Build Path
  > 新建一個(gè)Struts的Action,代碼如下:

package cn.appex.menu;

import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.ListResourceBundle;
import java.util.Map;

import com.mysql.jdbc.Driver;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.sf.navigator.menu.MenuComponent;
import net.sf.navigator.menu.MenuRepository;
import net.sf.navigator.menu.PermissionsAdapter;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class MenuAction extends Action {
    
public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            
throws Exception {
        buildMenuRepository(request);
        buildMenuResourceBundle(request);
        buildMenuPermissions(request);
        
return (mapping.findForward("success"));
    }

    
/**
     * 創(chuàng)建菜單數(shù)據(jù)結(jié)構(gòu)
     * 
     * 
@param request
     
*/
    
private void buildMenuRepository(HttpServletRequest request) {
        MenuRepository repository 
= new MenuRepository();
        
// Get the repository from the application scope - and copy the
        
// DisplayerMappings from it.
        MenuRepository defaultRepository = (MenuRepository) request
                .getSession().getServletContext().getAttribute(
                        MenuRepository.MENU_REPOSITORY_KEY);
        repository.setDisplayers(defaultRepository.getDisplayers());

        Map[] menus 
= getMenuComponents();
        
for (int i=0; i < menus.length; i++) {
            MenuComponent mc 
= new MenuComponent();
            Map row 
= menus[i];
            String name 
= (String) row.get("name");
            mc.setName(name);
            String parent 
= (String) row.get("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);
            }
            String title 
= (String) row.get("title");
            mc.setTitle(title);
            String location 
= (String) row.get("location");
            mc.setLocation(location);
            String description 
= (String) row.get("description");
            mc.setDescription(description);
            repository.addMenu(mc);
        }
        
        request.setAttribute(
"examplesRepository", repository);
    }

    
/**
     * 從數(shù)據(jù)庫(kù)中讀取菜單配置信息
     * 
     * 
@return
     
*/
    
private Map[] getMenuComponents() {
        ArrayList list 
= new ArrayList();
        Connection conn 
= null;
        PreparedStatement pstmt 
= null;
        ResultSet rest 
= null;
        String sql 
= "select name,parent_name,title,location,description from menu_item order by id";
        
try {
            Class.forName(
"com.mysql.jdbc.Driver").newInstance();
            conn 
= DriverManager.getConnection("jdbc:mysql://localhost/myexamples?user=root&password=mywangya&useUnicode=true&characterEncoding=UTF-8");
            pstmt 
= conn.prepareStatement(sql);
            rest 
= pstmt.executeQuery();
            
while (rest.next()) {
                
int i = 1;
                HashMap map 
= new HashMap();
                map.put(
"name", rest.getString(i++));
                map.put(
"parent_name", rest.getString(i++));
                map.put(
"title", rest.getString(i++));
                map.put(
"location", rest.getString(i++));
                map.put(
"description", rest.getString(i++));
                list.add(map);
            }
        } 
catch (SQLException ex) {
            ex.printStackTrace();
        } 
catch (InstantiationException e) {
            e.printStackTrace();
        } 
catch (IllegalAccessException e) {
            e.printStackTrace();
        } 
catch (ClassNotFoundException e) {
            e.printStackTrace();
        } 
finally {
            
try {
                
if (null!=rest) rest.close();
                
if (null!=pstmt) pstmt.close();
                
if (null!=conn) conn.close();
            } 
catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        
return (Map[]) list.toArray(new HashMap[0]);
    }
    
    
/**
     * 構(gòu)造菜單權(quán)限
     * 
     * 
@param request
     
*/
    
private void buildMenuPermissions(HttpServletRequest request) {
        PermissionsAdapter permession 
= new PermissionsAdapter() {
            
public boolean isAllowed(MenuComponent menu) {
                
// 名稱等于StandaloneMenu的菜單不顯示
                return !"StandaloneMenu".equalsIgnoreCase(menu.getName());
            }
        };
        request.setAttribute(
"examplesPermession", permession);
    }

    
/**
     * 構(gòu)造菜單顯示標(biāo)題
     * 
     * 
@param request
     
*/
    
private void buildMenuResourceBundle(HttpServletRequest request) {
        MenuResourceBundle resourceBundle 
= new MenuResourceBundle();
        request.setAttribute(
"examplesBundle", resourceBundle);
    }
    
    
/**
     * MenuResourceBundle樹(shù)狀菜單國(guó)際語(yǔ)言顯示
     * 
     * 
@author wenbin.zhang
     *  
     
*/
    
class MenuResourceBundle extends ListResourceBundle {
        
private ArrayList list = new ArrayList();

        
public MenuResourceBundle() {
            Connection conn 
= null;
            PreparedStatement pstmt 
= null;
            ResultSet rest 
= null;
            String sql 
= "select title,titleCN from menu_item order by id";
            
try {
                Class.forName(
"com.mysql.jdbc.Driver").newInstance();
                conn 
= DriverManager.getConnection("jdbc:mysql://localhost/myexamples?user=root&password=mywangya&useUnicode=true&characterEncoding=UTF-8");
                pstmt 
= conn.prepareStatement(sql);
                rest 
= pstmt.executeQuery();
                
while (rest.next()) {
                    
int i = 1;
                    String[] message 
= new String[2];
                    message[
0= rest.getString(i++);
                    
try {
                        message[
1= new String(rest.getString(i++).getBytes("latin1"), "gbk");
                    } 
catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                    
if (message[0!= null && message[1!= null) {
                        list.add(message);
                    }
                }
            } 
catch (SQLException ex) {
                ex.printStackTrace();
            } 
catch (InstantiationException e) {
                e.printStackTrace();
            } 
catch (IllegalAccessException e) {
                e.printStackTrace();
            } 
catch (ClassNotFoundException e) {
                e.printStackTrace();
            } 
finally {
                
try {
                    
if (null!=rest) rest.close();
                    
if (null!=pstmt) pstmt.close();
                    
if (null!=conn) conn.close();
                } 
catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }

        
public Object[][] getContents() {
            
return (String[][]) list.toArray(new String[0][0]);
        }
    }
}

> 將struts-config.xml文件的<action-mappings />部分修改為:
<action-mappings>
  
<action path="/menuAction" type="cn.appex.menu.MenuAction" >
    
<forward name="success" path="/struts-menu/dynamic-menu.jsp" />
  
</action>
</action-mappings>
> 新建JSP文件web/dynamic-menu.jsp,內(nèi)容如下:
<%@ page contentType="text/html; charset=GBK" %>
<%@ taglib uri="struts-menu" prefix="menu" %>

<p>沒(méi)有使用Bundle和權(quán)限控制:
<menu:useMenuDisplayer name="ListMenu" repository="examplesRepository">
    
<menu:displayMenu name="DatabaseMenu"/>
    
<menu:displayMenu name="StandaloneMenu"/>
</menu:useMenuDisplayer></p>

<p>使用Bundle, 沒(méi)有使用權(quán)限控制:
<menu:useMenuDisplayer name="ListMenu" bundle="examplesBundle" repository="examplesRepository">
    
<menu:displayMenu name="DatabaseMenu"/>
    
<menu:displayMenu name="StandaloneMenu"/>
</menu:useMenuDisplayer></p>

<p>使用Bundle和權(quán)限控制:
<menu:useMenuDisplayer name="ListMenu" permissions="examplesPermession"  bundle="examplesBundle" repository="examplesRepository">
    
<menu:displayMenu name="DatabaseMenu"/>
    
<menu:displayMenu name="StandaloneMenu"/>
</menu:useMenuDisplayer></p>

七、關(guān)于Struts-Menu配置文件和API的使用方法,請(qǐng)參考附錄中的官方網(wǎng)站


附:
Struts-Menu官方網(wǎng)站:http://struts-menu.
數(shù)據(jù)庫(kù)驅(qū)動(dòng)的動(dòng)態(tài)菜單:http://demo./struts-menu/dynamicMenu.jsp

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多