迁移Struts1 <logic:iterate> tag

时间:2018-02-06 12:44:48

标签: jsp struts2

我正在将一些Struts1代码迁移到Struts2,并对下面代码的迁移感到困惑。

Struts1的:

<logic: notEmpty name="newsListForm" property="generalNews.list">
    <logic:iterate id="generalNews"
        name="newsListForm"
        property="generalNews.list"
        type="com.ab.NewsDTO"
        indexId="rowCount">
        <%
            if(rowCount.longValue() % 2 == 0){
             bgcolor = "#FFFFF";
            }else{
             bgcolor = "#EEEEE";
            }
        %>
     </logic: iterate>
    </logic: notEmpty>

我已将以上代码迁移为:

Struts2的

<s:if test="(newsListBean.generalNews.list != null)">
 <s:iterator id="generalNews"
            values="generalNews.list"
            status="incrementer">
    <s:if test="#incrementer.even==true">
<% pageContext.setAttribute("bgcolor","#FFFFFF")%>
</s:if>
 <s:else>
<% pageContext.setAttribute("bgcolor","#EEEEEE")%>
</s:else>
>

</s:iterator>
</s:if>

这是迁移这些迭代的正确方法吗? notEmpty标签?

2 个答案:

答案 0 :(得分:0)

不,这不对。原始代码使用标记和scriptlet代码生成一些可能是JavaScript代码的文本。

但转换后的代码没有这样做。相反,它用于设置页面上下文属性。

答案 1 :(得分:0)

有点偏离主题,但有关:有一种方法,通过使用适当的CSS来做到这一点更简洁。

首先要有行颜色的类:这是你应该拥有的东西,而不是将表示定义结合到JSP代码中:

<style>
  .row-0 { bgcolor: #ffffff }
  .row-1 { bgcolor: #eeeeee }
</style>

然后使用它们为你需要的任何东西构建类名(在这里,很可能<td> s):

<s:iterator id="generalNews" values="generalNews.list" status="stat">
  <tr class="row-${stat.count % 2}">
    <!-- ... Table row content ... -->
  </tr>
</s:iterator>

(粗略;这是来自记忆。)