<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色香蕉一区二区三区| 成人AV免费网址在线观看| 精品亚洲AV无码一区二区| 国产成人综合亚洲亚洲国产第一页| 在线a级毛片免费视频| 精品视频在线免费观看| 国产午夜亚洲精品不卡免下载| 亚洲国产夜色在线观看| 亚洲免费人成在线视频观看| 免费国产综合视频在线看| 午夜免费福利在线| 久久久久久精品免费免费自慰| 99久久婷婷免费国产综合精品| 免费无码婬片aaa直播表情| 亚洲人成网站在线在线观看| 亚洲日本国产精华液| 西西人体44rt高清亚洲| 亚洲麻豆精品国偷自产在线91| 国产裸模视频免费区无码| 成人免费视频一区二区三区| 国产91免费在线观看| 亚洲一区二区在线免费观看| a级毛片免费观看视频| 亚洲免费日韩无码系列| 在线播放免费人成视频网站| 特黄特色大片免费| 国产99久久亚洲综合精品| 亚洲hairy多毛pics大全| 亚洲另类无码一区二区三区| 国产精品高清视亚洲一区二区 | 免费观看在线禁片| a毛片在线看片免费| 亚洲天堂免费在线视频| 国产人成网在线播放VA免费| 国产激情久久久久影院老熟女免费 | 国产一级婬片A视频免费观看| v片免费在线观看| 一级一级毛片免费播放| 一级毛片大全免费播放| 黄 色一级 成 人网站免费| 国产成人精品免费视频大全|