-1

などLogin.jspの基本的なページを使用してStrutsプロジェクト(Struts2)を作成しました。Main.jsp

私はこの方法でナビゲーションを行いましたが、それを行うためのより良い方法はありますか?

セッションの属性としてURLパスを保持するリストを追加しました(サーブレット/アクションクラスで実行)

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 では、URL のパラメーターとして一意のページ ID を使用して、表示しているページを参照します。しかし、それは必要ではありません。必要なのは、アクション パスを参照するページ オブジェクトだけです。

于 2013-02-22T15:20:21.477 に答える