云自無心水自閑

          天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
          posts - 288, comments - 524, trackbacks - 0, articles - 6
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          日歷

          <2007年3月>
          25262728123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          隨筆檔案

          積分與排名

          • 積分 - 1127867
          • 排名 - 27

          最新評論

          appfuse 1.9.4 學習心得 III

          Posted on 2007-03-08 09:51 云自無心水自閑 閱讀(1625) 評論(0)  編輯  收藏 所屬分類: Java心得體會Appfuse

          index.jsp重定向到mainMenu.html,但其實mainMenu.html并不是一個真正的存在的Html頁面。
          在appfuse中,Struts的Action的后綴使用的是不是常見的.do,而使用的是.html。
          見Web.xml:

          ??? <servlet-mapping>
          ??????? <servlet-name>action</servlet-name>
          ??????? <url-pattern>*.html</url-pattern>
          ??? </servlet-mapping>


          因此,查看struts-config.xml,發現/menuMenu只是簡單地Forward到/WEB-INF/pages/mainMenu.jsp。
          所以,在此處顯示的內容是mainMenu.jsp的內容。

          mainMenu.jsp頁面中的內容不多,只有一個簡單的列表,包含兩個鏈接:編輯信息、上傳文件。

          現在需要仔細研究一下菜單的顯示了。可以看到在menuMenu.jsp和login.jsp中都沒有菜單的定義和顯示。其實菜單的定義和顯示還是在前面說到的default.jsp中。
          default.jsp中如下一段代碼:

          ??????????? <c:set var="currentMenu" scope="request"><decorator:getProperty property="meta.menu"/></c:set>
          ??????????? <c:if test="${currentMenu == 'AdminMenu'}">
          ??????????? <div id="sub">
          ??????????????? <menu:useMenuDisplayer name="Velocity" config="WEB-INF/classes/cssVerticalMenu.vm" permissions="rolesAdapter">
          ??????????????????? <menu:displayMenu name="AdminMenu"/>
          ??????????????? </menu:useMenuDisplayer>
          ??????????? </div>
          ??????????? </c:if>

          ??????????? <div id="nav">
          ??????????????? <div class="wrapper">
          ??????????????????? <h2 class="accessibility">Navigation</h2>
          ??????????????????? <jsp:include page="/common/menu.jsp"/>
          ??????????????? </div>
          ??????????????? <hr />
          ??????????? </div><!-- end nav -->

          首先從頁面中取出meta.menu的值,這個值在login.jsp中是: <meta name="menu" content="Login"/>
          在mainMenu.jsp中是:<meta name="menu" content="MainMenu"/>
          所以,login.jsp中 test="${currentMenu == 'AdminMenu'}" 都不通過。每一部分的內容在這兩個頁面中都不顯示。

          下面的一部分是common/menu.jsp,主要是一個menu:useMenuDisplayer
          顯示的菜單第一個進行了判斷,<c:if test="${empty pageContext.request.remoteUser}">
          查看Jsp容器中維護的認證中當前用戶是否為空,如果成功登錄,則這個值即為登錄用戶名,否則為空。
          也就是說,如果沒有成功登錄,則會顯示登錄菜單<li><a href="<c:url value="/login.jsp"/>" class="current"><fmt:message key="login.title"/></a></li>。

          除了剛才的第一個登錄項以外,還有5條菜單菜單項,這5個菜單項使用的是struts-menu的標準用法,而不是象剛才那樣直接HTML的輸出。
          ??? <menu:displayMenu name="MainMenu"/>
          ??? <menu:displayMenu name="UserMenu"/>
          ??? <menu:displayMenu name="FileUpload"/>
          ??? <menu:displayMenu name="AdminMenu"/>
          ??? <menu:displayMenu name="Logout"/>
          查看menu-config.xml,可以發現,只有第一的菜單項MainMenu沒有定義角色

          < MenuConfig >
          ????
          < Displayers >
          ????????
          < Displayer? name ="Velocity" ?type ="net.sf.navigator.displayer.VelocityMenuDisplayer" />
          ????
          </ Displayers >
          ????
          < Menus >
          ????????
          < Menu? name ="MainMenu" ?title ="mainMenu.title" ?page ="/mainMenu.html" />
          ????????
          < Menu? name ="UserMenu" ?title ="menu.user" ?description ="User?Menu" ?forward ="editProfile" ?roles ="admin,user" />
          ????????
          < Menu? name ="FileUpload" ?title ="menu.selectFile" ?description ="File?Upload" ?width ="100" ?forward ="selectFile" ?roles ="admin,user" />
          ????????
          < Menu? name ="AdminMenu" ?title ="menu.admin" ?description ="Admin?Menu" ?roles ="admin" ?width ="120" ?forward ="viewUsers" >
          ????????????
          < Item? name ="ViewUsers" ?title ="menu.admin.users" ?forward ="viewUsers" />
          ????????????
          < Item? name ="ActiveUsers" ?title ="mainMenu.activeUsers" ?action ="activeUsers" />
          ????????????
          < Item? name ="ReloadContext" ?title ="menu.admin.reload" ?action ="reload" />
          ????????????
          < Item? name ="FlushCache" ?title ="menu.flushCache" ?action ="flush" />
          ????????????
          < Item? name ="Clickstream" ?title ="menu.clickstream" ?page ="/clickstreams.jsp" />
          ????????
          </ Menu >
          ????????
          < Menu? name ="Logout" ?title ="user.logout" ?page ="/logout.jsp" ?roles ="admin,user" />
          ????
          </ Menus >
          </ MenuConfig >


          因此,在login.jsp頁面也能顯示此菜單項。
          而剩下需要角色的菜單,就需要登錄后,根據角色的設置來顯示相應的菜單了。

          比如:mraible用戶是admin角色,可以顯示全部菜單。tomcat用戶是user角色,就看不到AdminMenu了。

          ?



          主站蜘蛛池模板: 华安县| 喀什市| 汽车| 胶州市| 沭阳县| 阜新市| 白水县| 文登市| 兴业县| 汉中市| 巴彦县| 顺昌县| 泉州市| 南江县| 金门县| 新巴尔虎右旗| 鹿泉市| 普兰店市| 章丘市| 冷水江市| 海南省| 卫辉市| 安义县| 和龙市| 南昌市| 喀什市| 泌阳县| 繁峙县| 酒泉市| 阳朔县| 锡林浩特市| 新沂市| 南溪县| 太谷县| 乐平市| 韶山市| 门头沟区| 临清市| 临邑县| 威海市| 驻马店市|