이 질문은 tumbleweeds를 (를)보고있는 것 같습니다. 나는 문제를 많이 겪었지만 실행 가능한 솔루션을 찾지 못했기 때문에 내가 가지고있는 생각의 구현을 쓰고 싶다. 나는 당신의 의견을 위해 이것을 게시하고 있다고 생각하는지 말해 준다. * 가치있는 아이디어라면, 결과 코드를 게시 할 것입니다.
첫째, 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>
참고 :이이 자원 번들에서 반환하기위한 것입니다으로 메뉴에는 "텍스트"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 메뉴.
그건 훌륭한 솔루션 ejmarino, 고마워. 이 타일은 사용하기에 매우 간단하므로 이미 타일을 사용하고 있습니다. 내 menu.jsp에서 그 뜻은 그 클래스가 그'li'에 적용되어야 하는지를 결정하기 위해' '블럭을 많이 써야한다는 것을 의미합니다. 그러나 자바 스크립트의 작은 조각으로 단순화 될 수 있습니다. 다시 한 번 감사드립니다. –