我開始使用Spring MVC 3.0應用程序並獲得控制器和視圖很好地工作,我現在需要做的一件事就是讓導航工作。因此,對於我擁有的每個視圖,需要知道視圖的「菜單」部分中的哪些項目以突出顯示以及該視圖可用的菜單選項。請推薦使用什麼導航策略來使用Spring MVC 3.0
我想到的一件事是讓控制器告訴視圖它在哪裏,但這是將視圖邏輯綁定到控制器中。我的視圖菜單包含在每個視圖中。
你的方法是什麼?我正在考慮使用瓷磚,至此我只使用JSP和JSTL,也許這會有所幫助?
我開始使用Spring MVC 3.0應用程序並獲得控制器和視圖很好地工作,我現在需要做的一件事就是讓導航工作。因此,對於我擁有的每個視圖,需要知道視圖的「菜單」部分中的哪些項目以突出顯示以及該視圖可用的菜單選項。請推薦使用什麼導航策略來使用Spring MVC 3.0
我想到的一件事是讓控制器告訴視圖它在哪裏,但這是將視圖邏輯綁定到控制器中。我的視圖菜單包含在每個視圖中。
你的方法是什麼?我正在考慮使用瓷磚,至此我只使用JSP和JSTL,也許這會有所幫助?
我建議你使用的瓷磚作爲視圖管理器,並且這樣的viewNameTranslator:
<bean id="viewNameTranslator" class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator">
<property name="separator" value="." />
</bean>
所以這樣就可以避免在控制器類specifing視圖名稱返回void。
以後瓦def.xml 你定義視圖事端這樣的:
<definition name="newView" extends="baseView">
<put name="menu" value="/pages/menu/menu.jsp?highlightedView=newView" />
<put name="body" value="/pages/newStuff/content.jsp" />
</definition>
這樣引入了menu.jsp收到aditional的參數highlightedView與您需要的信息。 -
希望它有幫助。
看起來像這個問題是看到風滾草。我已經提出了很多問題,但沒有找到任何可行的解決方案,所以我想寫一個我有的想法的實現,我張貼這個爲您的意見,告訴我,如果你認爲它是* *想法,如果你認爲這是值得的,我會發布結果代碼。首先,我打算用加載XML菜單文件資源(最初只有一個,但稍後支持)的簡單無需請求的servlet來解決此問題。一個菜單包括然後useBean
菜單以用戶希望的任何方式加載和呈現,默認目標是簡單的無序列表,這是相當常見的。因此,首先,我的菜單可能類似於以下內容,它提供了安全角色,但可能通過創建兩個版本SimpleMenuServlet
和SpringSecurityMenuServlet
或類似的東西來增加額外的功能。
<menus>
<menu id='home' path='/home'>
<paths>
<match pattern='/home'/>
</paths>
</menu>
<menu id='administration' path='/admin'>
<allowed-roles>
<role name='admin'/>
</allowed-roles>
<paths>
<match pattern='/admin/**'/>
</paths>
</menu>
<menu id='reports' path='/reports'>
<allowed-roles>
<role name='user'/>
<role name='admin'/>
</allowed-roles>
<paths>
<match pattern='/reports/**'/>
<match pattern='/item/*/reports/**'/>
</paths>
<menu>
</menus>
注:有上,因爲這是爲了從資源包返回菜單沒有「文本」 attibute。
現在可以使用來自servlet的useBean
或通過自定義標記庫來完成渲染,我不認爲這是真的必要,但是誰知道。
<ul id="main-menu">
<c:forEach var="item" items="${menu-items}">
<c:choose>
<c:when test="${item.selected && !found}">
<c:set var="menuClass" value="selected"/>
<c:set var="found" value="selected"/>
</c:when>
<c:otherwise>
<c:set var="menuClass" value=""/>
</c:otherwise>
</c:choose>
<li id="${item.id}" class="${menuClass}">
<!-- Using resource bundle to get text, this could be the
servlet/menu item that's responsible to get this instead -->
<a href="${item.path}"><fmt:message key="menu-${item.id}" /></a>
</li>
</c:forEach>
</ul>
所以現在我的理由是,我的JAR的servlet和菜單豆了,對於控制它通過web.xml
裝載菜單文件和啓動等,然後通過任何視圖渲染。
正如你所看到的菜單的核心工作的路徑模式決定你在哪個區域,它不處理頁面鏈接像面孔一樣,但這不是我想要的,我正在尋找一個靜態的,可配置的,可維護的菜單,我的觀點和我的控制器都不需要有大量的知識。
那麼控制器是什麼樣的?我們的菜單實際上需要指向當前客戶端子頁面的鏈接,並在url中包含clientId。它僅在客戶端模塊內和特定客戶端已加載時纔可用。 – dukethrash 2010-11-30 16:22:23
這是一個很好的解決方案ejmarino,謝謝。我已經在使用瓷磚了,所以這很簡單。這意味着在我的menu.jsp中,我必須使用大量' '塊來確定該類是否應該應用於'li',儘管這可以通過一小段JavaScript來簡化。再次感謝,很好的回答。 –
2010-09-01 08:41:37