2013-02-19 4 views
-1

나는 그런 Login.jsp과 같은 몇 가지 기본 페이지, Main.jspjsp에서 탐색 링크 추가?

나는이 방식으로 탐색을 수행 한

, 그것을 할 수있는 더 좋은 방법이 등으로 스트럿츠 프로젝트 (Struts2를) 만들었습니다?

추가 내가

<div id="nav_container"> 
    <ul id="nav"> 
     <c:forEach items="${menu}" var="item"> 
      <c:choose> 
       <c:when test="${pageContext.request.servletPath == item.value}"> 
        <li><a id="nav_active" href="" style="color: #000000">${item.key}</a> </li> 
       </c:when> 
       <c:otherwise> 
        <b> 
        <li><a href="/projectname${item.value}">${item.key}</a></li> 
        </b> 
       </c:otherwise> 
      </c:choose> 
     </c:forEach> 
    </ul>     
</div> 

확실히 문자열을 비교하고있는 JSP 페이지에서 (서블릿/액션 클래스에서 수행) 세션의 속성

private void initNavigationMenu(){ 
    navigationMenu = new HashMap<String, String>(); 
    navigationMenu.put("Main", "/main.jsp"); 
    navigationMenu.put("Login", "/login.jsp"); 
    navigationMenu.put("Registration", "/registration.jsp"); 
} 

@Override 
public void contextInitialized(ServletContextEvent event) { 
    initNavigationMenu(); 
    event.getServletContext().setAttribute("menu", navigationMenu); 

} 

로 URL 경로를 들고 목록 이 작업을 수행하는 더 좋은 방법이 있습니다. 누군가 구현할 수있는 올바른 방법을 제안 할 수 있습니까?

+0

링크 URL과 텍스트 목록을 만들어 표시합니다. –

+0

'HashMap'은 순서가 없기 때문에 사용하지 않을 것입니다. ['LinkedHashMap'] (http : //docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html) –

+0

을 사용하는 것이 더 낫습니다. 또한 [''] (http : //docs.oracle.com/javaee/5/tutorial/doc/bnakh.html#bnakn) 링크를 만드는 것이 좋습니다. –

답변

0

navigationMenu 개체에 작업 경로가 있다고 가정합니다. 그런 다음 각 액션에서 메뉴 항목에 대한 참조를 가져 오는 것과 마찬가지로 페이지 객체를 생성하고이 객체를 요청에 넣습니다. 따라서 ${page}을 통해 사용할 수 있습니다.

그리고 JSP 페이지를 렌더링 할 때 servletPath의 문자열을 비교하는 대신 페이지 객체가 무엇인지 알 수 있습니다.

영구 페이지 개체를 관리해야하는 경우 대부분의 CMS에서 더 잘 수행됩니다. 일부 CMS는 URL에 매개 변수로 고유 한 페이지 ID를 사용하여 표시중인 페이지를 참조합니다. 하지만 꼭 필요한 것은 아닙니다. 필요한 것은 액션 경로를 참조하는 페이지 객체뿐입니다.