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,發(fā)現(xiàn)/menuMenu只是簡單地Forward到/WEB-INF/pages/mainMenu.jsp。所以,在此處顯示的內(nèi)容是mainMenu.jsp的內(nèi)容。mainMenu.jsp頁面中的內(nèi)容不多,只有一個簡單的列表,包含兩個鏈接:編輯信息、上傳文件。
現(xiàn)在需要仔細研究一下菜單的顯示了。可以看到在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'}" 都不通過。每一部分的內(nèi)容在這兩個頁面中都不顯示。
下面的一部分是common/menu.jsp,主要是一個menu:useMenuDisplayer顯示的菜單第一個進行了判斷,<c:if test="${empty pageContext.request.remoteUser}">查看Jsp容器中維護的認(rèn)證中當(dāng)前用戶是否為空,如果成功登錄,則這個值即為登錄用戶名,否則為空。也就是說,如果沒有成功登錄,則會顯示登錄菜單<li><a href="<c:url value="/login.jsp"/>" class="current"><fmt:message key="login.title"/></a></li>。除了剛才的第一個登錄項以外,還有5條菜單菜單項,這5個菜單項使用的是struts-menu的標(biāo)準(zhǔn)用法,而不是象剛才那樣直接HTML的輸出。??? <menu:displayMenu name="MainMenu"/>??? <menu:displayMenu name="UserMenu"/>??? <menu:displayMenu name="FileUpload"/>??? <menu:displayMenu name="AdminMenu"/>??? <menu:displayMenu name="Logout"/>查看menu-config.xml,可以發(fā)現(xiàn),只有第一的菜單項MainMenu沒有定義角色
因此,在login.jsp頁面也能顯示此菜單項。而剩下需要角色的菜單,就需要登錄后,根據(jù)角色的設(shè)置來顯示相應(yīng)的菜單了。比如:mraible用戶是admin角色,可以顯示全部菜單。tomcat用戶是user角色,就看不到AdminMenu了。
?
Powered by: BlogJava Copyright © 云自無心水自閑