Пожалуйста, порекомендуйте, какую стратегию навигации использовать для Spring MVC 3.0 - PullRequest
6 голосов
/ 29 июля 2010

Я запускаю приложение Spring MVC 3.0 и хорошо работаю с контроллерами и представлениями, теперь мне нужно только настроить навигацию. Поэтому для каждого имеющегося у меня представления необходимо знать, какой элемент в части «меню» вида выделить, и какие пункты меню доступны для этого представления.

Одна вещь, о которой я подумал, - заставить контроллер сказать представлению, где он находится, но это связывает логику представления с контроллером. Мое меню видов имеет свои собственные функции, которые я включаю в каждый вид.

Какие у вас подходы? Я думаю об использовании плиток, на данный момент я использую только JSP и JSTL, может быть, это поможет?

Ответы [ 2 ]

3 голосов
/ 31 августа 2010

Я рекомендую вам использовать плитки в качестве менеджера представлений и viewNameTranslator, например:

<bean id="viewNameTranslator" class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator">
    <property name="separator" value="." />
</bean>

Таким образом, вы можете избежать указания имен представлений в классе контроллера, возвращая void.

позже в файле tile-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 получает дополнительный параметр selectedView с информацией, которую вынужно .-

Надеюсь, это поможет.

1 голос
/ 30 июля 2010

Похоже, на этот вопрос видят перекаты.Я уже много раз решал эту проблему, но не нашел жизнеспособных решений, так что подумал, что напишу реализацию идеи, которая у меня есть, я публикую это для ваших комментариев, скажите, если вы думаете, что это ** t идея, если вы считаете это достойным, я опубликую результирующий код.

Во-первых, я планирую решить это с помощью простого сервлета без запросов, который загружает ресурсы файла меню XML (первоначально только один, но о поддержке позже).Включение меню может затем 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>

ПРИМЕЧАНИЕ: нетАтрибут «Текст» в меню, поскольку он предназначен для возврата из комплектов ресурсов.

Теперь рендеринг можно выполнять с помощью 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-сервлет и меню bean вверх, управлять им через web.xml в отношении загрузки файлов меню и запускаи т. д., затем выполните рендеринг в любом представлении.

Как вы можете видеть, ядро ​​меню работает по шаблонам контуров, определяющим, в какой области вы находитесь, оно не обрабатывает ссылки на страницы, как это делают лица, bно это не то, что я намереваюсь, я ищу статичное, настраиваемое, обслуживаемое меню, о котором ни мои представления, ни мои контроллеры не должны иметь большого знания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...