私は 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 インターセプターを使用させる方法はありますか?