1

私は Struts 2 と Apache タイルを使用していますが、どちらも初めてです。私には正しくないと思われるいくつかの既存のソースを「クリーン」にしようとしています (間違っている場合は教えてください)。

私は次の構造を持っています:

  • layout.jsp で:

    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title><tiles:getAsString name="title" /></title>
        <tiles:insertAttribute name="header" />
    </head>
    <body>
        <div id="content-size-and-border">
            <s:if test="display!='nomenu'">
                <tiles:insertAttribute name="menu" />
            </s:if>         
            <div id="maincontent">
                <tiles:insertAttribute name="maincontent" />
            </div>
        </div>
    
    </body>
    

メインコンテンツ部分は、クリックされた項目メニューに応じてさまざまな jsp/action を表示します。メニュー パーツは、jsp 内で直接 Java コードを使用して、リストを反復処理することにより多数のサブフォルダーを生成します。

<li class="highlight sousmenu"><a href="#"><s:text
    name="menu.demarrage" /></a>
    <ul class="niveau2">

        <%
        Locale language = (Locale) session.getAttribute("WW_TRANS_I18N_LOCALE"); 
        // the attribute (used by i18n struts interceptor) 
        // set in session when the user changes the language

        if (language == null)
            language = request.getLocale() ;
        // if the language was not changed, get the default Locale from browser

        User user = ((CustomUserDetails) SecurityContextHolder.getContext()
                .getAuthentication().getPrincipal()).getBpmUser();
            if (user != null) {
                for (Iterator iterator = user.getProcesses().iterator(); iterator
                        .hasNext();) {
                    String processToStart = (String) iterator.next();
                    String processPath = BpmUiConstantes.BPMUI_PROCESS_CONFIG_ROOT + "/" + processToStart ;
                    String processLib = "process." + processToStart + ".label";                              
        %>

        <li>
            <a href="<%=request.getContextPath()%>/restricted/DemarrerProcessAvecTache?processName=<%=processToStart%>">
                <fmt:setLocale value="<%=language%>"/>
                <fmt:bundle basename="<%=processPath%>">
                    <fmt:message key="<%=processLib%>"/>
                </fmt:bundle>
            </a>
        </li>

        <%
                }   
            }
        %>
    </ul>
</li>

jspにJavaコードを使用せずに、同じ結果を達成するためのより良い方法があるかどうか疑問に思っていました. 概念の観点から、JSP から Java コードを削除することは重要ですか?

アプリケーションは、言語の変更に struts i18n インターセプターを使用します。メニューに何らかの方法で struts i18n インターセプターを使用させる方法はありますか?

4

2 に答える 2

1

私は間違いなく、JSTL コア (foreach を使用するための C タグ) と fmt (ロケール言語用) をさらに調べます。これら 2 つのライブラリを使用すると、埋め込まれた Java コードをページに安全に削除し、より合同/安全なアプローチ

ここに JSTL のオラクル Web ページがありますので、参考にしてください。

JSTL リファレンス

他にご不明な点がございましたら、お気軽にお問い合わせください。

于 2012-07-10T08:20:34.823 に答える
0

以前の投稿にいくつかの回答を追加します。

このメニューで struts i18n インターセプターを使用する方法はありません。何よりも、ResourceBundle の Locale または fmt:bundle の Locale がこのインターセプターによって設定されないため、役に立ちません。Locale を明示的に指定する必要があります (コードで行ったように) => この部分は変更できません。

ただし、このJavaコードをjspから削除することの重要性についてはまだわかりません。

于 2012-07-11T09:34:44.023 に答える