-1

我制作了一个 Struts 项目 (Struts2),其中包含一些基本页面,例如Login.jspMain.jsp

我已经以这种方式完成了导航,有更好的方法吗?

在会话中添加了一个将 url 路径作为属性保存的列表(在 servlet/action 类中完成)

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);

}

在 JSP 页面中,我正在比较字符串

<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>

绝对有更好的方法可以做到这一点,有人可以建议我正确的实施方式。

4

1 回答 1

0

假设navigationMenu对象包含动作路径。然后在每个操作中生成一个页面对象,就像获取对菜单项的引用并将该对象放入请求中一样。因此,它可以通过${page}.

当您呈现 JSP 页面时,您知道页面对象存在什么,而不是比较servletPath.

如果您需要管理持久性页面对象,最好使用大部分 CMS。一些 CMS 甚至使用唯一的页面 ID 作为 URL 中的参数来引用它们正在显示的页面。但这不是必需的。您所需要的只是引用操作路径的页面对象。

于 2013-02-22T15:20:21.477 回答