<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 14,  comments - 37,  trackbacks - 0
     

    1.       Database Driven Menu

     

    使用JSTLSQL標(biāo)記庫(kù),該標(biāo)記庫(kù)易用而且全面。本例子創(chuàng)建數(shù)據(jù)庫(kù)表、插入數(shù)據(jù),讀取表中的數(shù)據(jù)并構(gòu)建菜單。決定菜單在視圖中的可見(jiàn)性的邏輯可以在Servlet 、Struts ActionServlet Filter中實(shí)現(xiàn),可以直接使用例子中的代碼。

     

     

     

    瀏覽dynamicMenu.jsp頁(yè)面的內(nèi)容,可以看到該頁(yè)面中創(chuàng)建表并插入數(shù)據(jù)的代碼。每次加載頁(yè)面的時(shí)候,都會(huì)先刪除表、再創(chuàng)建表,插入數(shù)據(jù)。

    <sql:setDataSource var="db" url="jdbc:hsqldb:db/menu"

        driver="org.hsqldb.jdbcDriver" user="sa" password=""/>

     

     

     

    <sql:transaction dataSource="${db}">

     

     

     

        <sql:update>

            DROP TABLE menu_item IF EXISTS

        </sql:update>

        <sql:update>

            CREATE TABLE menu_item (

               id BIGINT not null,

               parent_name VARCHAR(30),

               name VARCHAR(30),

               title 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)

            )

        </sql:update>

     

     

     

        <sql:update var="updateCount">

            INSERT INTO menu_item

                (id, name, title)

            VALUES

                (1,'DatabaseMenu','Database Menu')

        </sql:update>

        <sql:update var="updateCount">

            INSERT INTO menu_item

                (id, parent_name, name, title, location)

            VALUES

                (2,'DatabaseMenu','Yahoo','Yahoo Mail','http://mail.yahoo.com')

        </sql:update>

        <sql:update var="updateCount">

            INSERT INTO menu_item

                (id, parent_name, name, title, location)

            VALUES

                (3,'DatabaseMenu','JavaBlogs','JavaBlogs','http://javablogs.com')

        </sql:update>

        <sql:update var="updateCount">

            INSERT INTO menu_item

                (id, name, title, location)

            VALUES

                (4,'StandaloneMenu','Standalone Menu','http://raibledesigns.com')

        </sql:update>

        <sql:query var="menus">

            SELECT * FROM menu_item order by id;

        </sql:query>

     

     

     

    </sql:transaction>

     

     

     

    現(xiàn)在開(kāi)始使用這些數(shù)據(jù)構(gòu)建菜單的定義。下面是構(gòu)建菜單的代碼。

    在一個(gè)架構(gòu)良好的應(yīng)用中,使用Hibernate、iBATISJDBC從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)。然后,使用業(yè)務(wù)代表(Business Delegate)根據(jù)誰(shuí)可以看到菜單,從ServletFilter、ServletContextListenerLoginServlet中調(diào)用相應(yīng)的業(yè)務(wù)代表。

            MenuRepository repository = new MenuRepository();

            // Get the repository from the application scope - and copy the

            // DisplayerMappings from it.

            MenuRepository defaultRepository = (MenuRepository)

                    application.getAttribute(MenuRepository.MENU_REPOSITORY_KEY);

            repository.setDisplayers(defaultRepository.getDisplayers());

     

     

     

            Result result = (Result) pageContext.getAttribute("menus");

            Map[] rows = result.getRows();

            for (int i=0; i < rows.length; i++) {

                MenuComponent mc = new MenuComponent();

                Map row = rows[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);

                repository.addMenu(mc);

            }

            pageContext.setAttribute("repository", repository);

     

     

     

    現(xiàn)在我們已經(jīng)構(gòu)建了菜單結(jié)構(gòu)庫(kù),使用下面的代碼顯示菜單:

            <menu:useMenuDisplayer name="ListMenu" repository="repository">

                <menu:displayMenu name="DatabaseMenu"/>

                <menu:displayMenu name="StandaloneMenu"/>

            </menu:useMenuDisplayer>

     

     

     

    也可以從菜單結(jié)構(gòu)庫(kù)中讀取菜單的名字,并使用JSTL<c:forEach>標(biāo)記循環(huán)生成菜單:

            <menu:useMenuDisplayer name="Velocity" config="/templates/xtree.html"

                repository="repository">

              <c:forEach var="menu" items="${repository.topMenus}">

                <menu-el:displayMenu name="${menu.name}"/>

              </c:forEach>

            </menu:useMenuDisplayer>

    posted on 2007-07-11 10:12 冰封的愛(ài) 閱讀(144) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): J2EE
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(3)

    隨筆檔案

    文章分類(lèi)

    文章檔案

    相冊(cè)

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 好男人视频在线观看免费看片| 亚洲综合国产成人丁香五月激情| 羞羞网站在线免费观看| 午夜毛片不卡高清免费| 亚洲欧美国产日韩av野草社区| 成人免费一区二区三区在线观看| 亚洲精品久久无码| 色吊丝永久在线观看最新免费| 亚洲精品亚洲人成在线 | 1000部免费啪啪十八未年禁止观看 | 亚洲免费闲人蜜桃| 亚洲国产成人超福利久久精品| 美女视频黄是免费的网址| 亚洲一本之道高清乱码| 午夜毛片不卡免费观看视频| 亚洲a∨无码精品色午夜| 免费人成视频在线观看视频| a高清免费毛片久久| 久久久久无码精品亚洲日韩| 最刺激黄a大片免费网站| 亚洲色大成网站www久久九| 国产在线播放免费| 久久国产美女免费观看精品| 久久久久亚洲av无码专区喷水| 国产a视频精品免费观看| 久久精品国产亚洲av天美18| 亚洲精品综合久久| 一级毛片全部免费播放| 国产亚洲中文日本不卡二区| 亚洲高清偷拍一区二区三区| 精品国产麻豆免费人成网站| 亚洲综合色区中文字幕| 亚洲AV网站在线观看| 中文字幕无码日韩专区免费| 一本色道久久综合亚洲精品蜜桃冫| 无码国模国产在线观看免费| a级毛片免费在线观看| 亚洲精品不卡视频| 亚洲日本中文字幕天堂网| 三年片在线观看免费大全电影| 亚洲欧美精品午睡沙发|