Struts2 increment a previous set <s:set /> value

25,821

Solution 1

You aren't required to create a reference variable just use #i.index or #i.count inside the iterator. It's already incremented by the iterator tag itself.

Note that "count" is 1-based, "index" is 0-based.

Always check the docs.

If you still need your own counter

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

increment

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

Solution 2

You Can Use this easy Way to Do this struts2 increment

<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

Share:
25,821
Emaborsa
Author by

Emaborsa

Started as Java developer....switched do C#

Updated on September 17, 2020

Comments

  • Emaborsa
    Emaborsa almost 4 years

    I'm working on JSPs with Struts2, I have to iterate on two lists, and change the background code of each <tr/> printed.

    My JSP snippet:

    <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>
    

    I need to increment my counter every step on the inner loop. Is there a way to increment my counter value by a simple struts tag? I know I could use Java scriptlet but I rather keep the JSP clear if possible.

  • Dave Newton
    Dave Newton over 11 years
    Need a separate counter because it needs to be based on the inner loop and not reset when the outer loop bumps up.
  • Emaborsa
    Emaborsa over 11 years
    I can't use the basic counter of an iterator, if you check my code you'll see that neither the outer loop nor the inner loop would give me a right counter that alternates from odd to even, in order to set the background color (trclass variable); in any case it doesn't matter if it starts with 0 or 1.... Before posting my question i tried your solution (<s:set var="counter" value="%{#counter+1}"/>) but it gave me an error by translating the JSP page. Tomorrow i'll try it again...
  • Roman C
    Roman C over 11 years
    to check that odd or even you could use j.even or j.odd it's boolean values. The last statement should work, isn't it?
  • Roman C
    Roman C over 11 years
    Works like a charm, use <s:property value="#counter"/> to display it.
  • Emaborsa
    Emaborsa over 11 years
    <s:set var="counter" value="%{#counter+1}"/> works, but only if i remove the scope from de first definition.
  • Roman C
    Roman C over 7 years
    @dom this question is dated more than 3 years ago. if you have a question and after deep search on SO you didn't find the answer, you can as a question.