我正在使用 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 拦截器?