Struts2 增加一个先前设置的 <s:set /> 值

Posted

技术标签:

【中文标题】Struts2 增加一个先前设置的 <s:set /> 值【英文标题】:Struts2 increment a previous set <s:set /> value 【发布时间】:2013-03-16 12:15:34 【问题描述】:

我正在使用 Struts2 开发 JSP,我必须迭代两个列表,并更改每个打印的 &lt;tr/&gt; 的背景代码。

我的 JSP sn-p:

<s:set var="counter" value="0" scope="page" />
<s:iterator value="listaContoCapitale" status="i">
    <s:iterator value="utilizzi" status="j">

    <s:if test="#counter == 0 || #counter % 2 == 0">
        <s:set var="trclass" value="'rigaSfondo1'" scope="page" />
    </s:if>
    <s:else>
        <s:set var="trclass" value="''" scope="page" />
    </s:else> 
    <tr class="$trclass">
        ....tds
    </tr>
    </s:iterator>
    <s:set var="counter" value="here i have to change its value (increment it by1)" />
</s:iterator>

我需要在内部循环的每一步都增加我的计数器。有没有办法通过一个简单的 struts 标签来增加我的计数器值?我知道我可以使用 Java scriptlet,但如果可能的话,我宁愿保持 JSP 清晰。

【问题讨论】:

除了Roman的回答,考虑使用三元来缩短类决策逻辑 三元是什么意思? 【参考方案1】:

您不需要创建引用变量,只需在迭代器中使用#i.index#i.count。它已经被迭代器标签本身增加了。

请注意,“count”是从 1 开始的,“index”是从 0 开始的。

始终检查docs。

如果你还需要自己的柜台

<s:set var="counter" value="0"/>

递增

<s:set var="counter" value="%#counter+1"/>

【讨论】:

需要一个单独的计数器,因为它需要基于内部循环而不是在外部循环出现时重置。 我不能使用迭代器的基本计数器,如果你检查我的代码,你会发现外循环和内循环都不会给我一个从奇数到偶数交替的正确计数器, 以设置背景颜色(trclass 变量);在任何情况下,它是否以 0 或 1 开头都没关系......在发布我的问题之前,我尝试了您的解决方案 ( ) 但它通过翻译 JSP 页面给了我一个错误。明天我会再试一次... 检查奇数或偶数可以使用j.evenj.odd 这是布尔值。最后一条语句应该有效,不是吗? 像魅力一样工作,使用&lt;s:property value="#counter"/&gt;来显示它。 有效,但前提是我从第一个定义中删除范围。【参考方案2】:

你可以使用这个简单的方法来做这个 struts2 增量

<s:set var="count" value="1"/>
<s:iterator value="yourlisthere">
<div><s:property value="#count" /><s:property/></div>
<s:set var="counter" value="%#count+1"/>
<s:set var="count" value="%#counter"/>
</s:iterator>

jsp struts2

【讨论】:

以上是关于Struts2 增加一个先前设置的 <s:set /> 值的主要内容,如果未能解决你的问题,请参考以下文章

struts2 3

struts2 自带的 token防止表单重复提交拦截器

在Groovy中增加String上的运算符

picturebox增加滚动条

oj.jzxx1022

总结15