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(用于语言环境),使用这两个库,您应该能够安全地将嵌入的 java 代码删除到您的页面中并使用更一致的/安全的方法

这是 JSTL 的 oracle 网页,因此您可以参考

JSTL 参考

如果您还有其他问题,请随时询问。

于 2012-07-10T08:20:34.823 回答
0

我将在上一篇文章中添加一些答案:

没有办法让这个菜单使用 struts i18n 拦截器,最重要的是,它是无用的,因为这个拦截器不会设置 ResourceBundle 的 Locale 或 fmt:bundle 的 Locale。有必要明确指定语言环境(就像我在代码中所做的那样)=> 这部分不能更改。

不过,我仍然不确定从 jsp 中删除此 java 代码的重要性。

于 2012-07-11T09:34:44.023 回答