2010-07-29 2 views
6

저는 Spring MVC 3.0 애플리케이션을 시작하고 컨트롤러와 뷰가 잘 작동하도록하기 위해 지금해야 할 한 가지는 탐색 작동을 얻는 것입니다. 그래서 내가 가지고있는 각각의 뷰에 대해 강조 할 뷰의 "메뉴"부분에있는 항목과 해당 뷰에서 사용할 수있는 메뉴 옵션을 알아야합니다.Spring MVC 3.0에 사용할 탐색 전략을 권장하십시오.

내가 생각한 한 가지 사실은 컨트롤러가 뷰가 어디에 있는지를 알려주는 것이지만 컨트롤러에 뷰 로직을 바인딩한다는 것입니다. 내보기 메뉴는 각보기 내에 포함 된 자체 포함입니다.

접근 방법은 무엇입니까? 나는이 점에 대해서만 타일을 사용하려고 생각하고있다. JSP와 JSTL을 사용하고 있는데 아마도 도움이 될 것이다.

답변

3

는 내가보기 관리자로 타일을 사용하도록 권장하고,이 같은 viewNameTranslator :

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

그래서 당신은 무효 반환 컨트롤러 클래스에 명시 할 뷰 이름을 피할 수 이런 식으로. 나중에 타일 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 당신이 필요로하는 정보와 함께이 추가적으로 매개 변수 highlightedView를받습니다.-

희망이 있습니다.

+0

그건 훌륭한 솔루션 ejmarino, 고마워. 이 타일은 사용하기에 매우 간단하므로 이미 타일을 사용하고 있습니다. 내 menu.jsp에서 그 뜻은 그 클래스가 그'li'에 적용되어야 하는지를 결정하기 위해''블럭을 많이 써야한다는 것을 의미합니다. 그러나 자바 스크립트의 작은 조각으로 단순화 될 수 있습니다. 다시 한 번 감사드립니다. –

1

이 질문은 tumbleweeds를 (를)보고있는 것 같습니다. 나는 문제를 많이 겪었지만 실행 가능한 솔루션을 찾지 못했기 때문에 내가 가지고있는 생각의 구현을 쓰고 싶다. 나는 당신의 의견을 위해 이것을 게시하고 있다고 생각하는지 말해 준다. * 가치있는 아이디어라면, 결과 코드를 게시 할 것입니다.

첫째, XML 메뉴 파일 리소스를로드하는 간단한 요청없는 서블릿으로 해결할 계획입니다 (처음에는 단 하나이지만 이후에는 더 많은 지원이 필요합니다). 메뉴를 포함하면 useBean 메뉴가로드되고 사용자가 원하는 방식으로 렌더링 할 수 있습니다. 기본 목표는 비교적 일반적인 단순한 정렬되지 않은 목록입니다.

우선 내 메뉴는 다음과 같을 수 있습니다. 보안 역할에 대한 규정이 있지만 SimpleMenuServletSpringSecurityMenuServlet 또는 이와 비슷한 두 가지 버전을 만들어 추가 된 것일 수 있습니다.

<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이 없습니다.

서블릿에서 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로드 메뉴 파일에 대한 web.xml를 통해 제어 등 시동 후 어떤 뷰에서 렌더링 할 수 있다는 것입니다.

경로의 패턴에 따라 메뉴의 핵심 부분을 볼 수 있듯이 얼굴과 같은 페이지 링크를 처리하지 못합니다.하지만 그 부분은 내가 의도 한 바가 아니므로 찾고 있습니다. 내보기도 내 컨트롤러도 큰 지식을 가지고 있어야 정적, 구성, maintainable 메뉴.

+0

그래서 컨트롤러는 어떻게 생겼습니까? 우리 메뉴에는 실제로 현재 클라이언트 서브 페이지에 대한 링크가 필요하며 url에 clientId가 있습니다. 클라이언트 모듈과 특정 클라이언트가로드 된 경우에만 사용할 수 있습니다. – dukethrash