<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 冰封的愛 閱讀(148) 評論(0)  編輯  收藏 所屬分類: J2EE
    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(3)

    隨筆檔案

    文章分類

    文章檔案

    相冊

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产模特在线播放| 亚洲Av无码国产一区二区| 国产精品免费大片一区二区| 国产精品成人观看视频免费| 亚洲一区二区免费视频| 亚洲∧v久久久无码精品| 不卡视频免费在线观看| 亚洲熟妇av一区二区三区漫画| 色偷偷亚洲男人天堂| 亚洲第一永久AV网站久久精品男人的天堂AV| 亚洲成在人线在线播放无码| 国产无遮挡吃胸膜奶免费看| 在线免费不卡视频| 亚洲美国产亚洲AV| 波多野结衣一区二区免费视频| 亚洲欧美精品午睡沙发| 日韩视频免费一区二区三区| 亚洲国产欧美一区二区三区| 热99re久久免费视精品频软件| 亚洲成a人片在线不卡一二三区| 免费看的成人yellow视频| 欧亚一级毛片免费看| 亚洲熟妇av一区二区三区| 免费的全黄一级录像带| 免费毛片a在线观看67194| 亚洲欧洲日韩国产一区二区三区| 丁香花免费高清视频完整版| 国产婷婷综合丁香亚洲欧洲| 日韩免费视频播播| 波霸在线精品视频免费观看| 亚洲综合婷婷久久| 一个人免费观看在线视频www | 亚洲成av人影院| 精品香蕉在线观看免费| 国产AV无码专区亚洲AV麻豆丫 | 亚洲欧洲∨国产一区二区三区| 无码日韩精品一区二区三区免费| 国产精品亚洲午夜一区二区三区| 亚洲AV无码成H人在线观看| 久9热免费精品视频在线观看| 亚洲精品无码av中文字幕|