<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標記庫,該標記庫易用而且全面。本例子創建數據庫表、插入數據,讀取表中的數據并構建菜單。決定菜單在視圖中的可見性的邏輯可以在Servlet Struts ActionServlet Filter中實現,可以直接使用例子中的代碼。

     

     

     

    瀏覽dynamicMenu.jsp頁面的內容,可以看到該頁面中創建表并插入數據的代碼。每次加載頁面的時候,都會先刪除表、再創建表,插入數據。

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

     

     

     

    現在開始使用這些數據構建菜單的定義。下面是構建菜單的代碼。

    在一個架構良好的應用中,使用HibernateiBATISJDBC從數據庫中讀取數據。然后,使用業務代表(Business Delegate)根據誰可以看到菜單,從ServletFilterServletContextListenerLoginServlet中調用相應的業務代表。

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

     

     

     

    現在我們已經構建了菜單結構庫,使用下面的代碼顯示菜單:

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

                <menu:displayMenu name="DatabaseMenu"/>

                <menu:displayMenu name="StandaloneMenu"/>

            </menu:useMenuDisplayer>

     

     

     

    也可以從菜單結構庫中讀取菜單的名字,并使用JSTL<c:forEach>標記循環生成菜單:

            <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 冰封的愛 閱讀(143) 評論(0)  編輯  收藏 所屬分類: J2EE
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(3)

    隨筆檔案

    文章分類

    文章檔案

    相冊

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 九九美女网站免费| 亚洲日本VA午夜在线影院| 久久国产亚洲精品麻豆| 亚洲综合激情另类专区| 亚洲精品视频在线看| 免费一级黄色毛片| 亚洲国产婷婷综合在线精品| 国产在线98福利播放视频免费| 午夜免费福利在线| 免费亚洲视频在线观看| 亚洲高清无码专区视频| 亚洲精品天堂成人片?V在线播放| 亚洲国产人成中文幕一级二级| 相泽亚洲一区中文字幕| 国产亚洲无线码一区二区| 亚洲女初尝黑人巨高清| 亚洲AV无码第一区二区三区| 久久久亚洲欧洲日产国码aⅴ | 久久午夜免费视频| 永久免费毛片在线播放| 午夜毛片不卡免费观看视频| 免费jjzz在在线播放国产| 国产亚洲精久久久久久无码AV| 亚洲成a人片77777kkkk| 亚洲色欲www综合网| 亚洲一区AV无码少妇电影| 337P日本欧洲亚洲大胆艺术图 | 久久精品国产亚洲AV蜜臀色欲| 久久久久久亚洲精品影院| 精品韩国亚洲av无码不卡区| 黄色网页在线免费观看| 桃子视频在线观看高清免费视频| 黄色永久免费网站| 国产免费av一区二区三区| 久久乐国产精品亚洲综合| 久久久久亚洲精品无码蜜桃| 99亚偷拍自图区亚洲| 一个人看的www视频免费在线观看 一个人看的免费观看日本视频www | 亚洲精品无码AV中文字幕电影网站 | 五月婷婷免费视频| 中文字幕免费在线|