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沒有定義角色



















因此,在login.jsp頁面也能顯示此菜單項。
而剩下需要角色的菜單,就需要登錄后,根據角色的設置來顯示相應的菜單了。
比如:mraible用戶是admin角色,可以顯示全部菜單。tomcat用戶是user角色,就看不到AdminMenu了。
?
posted @ 2007-03-08 09:51 云自無心水自閑 閱讀(1625) | 評論 (0) | 編輯 收藏