Struts2标签实现for循环

来源:互联网 发布:windows编程命名规则 编辑:程序博客网 时间:2024/05/20 19:45
正好需要,感谢。
原文地址:Struts2标签实现for循环作者:KevinFFK

在struts2及webwork中要实现如:

for(int i=0;i<10;i++){}

还是需要一些技巧的,我在做分页条的时候,要输出页码,怪了,用迭代器不行的,看了一下struts2的文档及例子也没发现用计数器的地方,偶然看了一下bea标签,哦,原来如此....

<s:bean name="org.apache.struts2.util.Counter"id="counter">
   <s:paramname="first" value="1" />
   <s:paramname="last" value="10" />
  <s:iterator>
    counter:<s:property/>
  </s:iterator>
</s:bean>

其中first属性指定循环起始值,last指定循环终止值,其它相关属性可以查看org.apache.struts2.util.Counter类源码。在下面迭代器中输入循环的当前值,即:current

干脆把源码贴出来吧!

-----------------------------------------------------------------------------------------------------------------------------


package org.apache.struts2.util;

import java.io.Serializable;



public class Counter implements java.util.Iterator, Serializable{

    private static final long serialVersionUID =2796965884308060179L;

    boolean wrap = false;

    // Attributes----------------------------------------------------
    long first = 1;
    long current = first;
    long interval = 1;
    long last = -1;


    public void setAdd(long addition) {
        current += addition;
    }

    public void setCurrent(long current) {
        this.current = current;
    }

    public long getCurrent() {
        return current;
    }

    public void setFirst(long first) {
        this.first = first;
        current = first;
    }

    public long getFirst() {
        return first;
    }

    public void setInterval(long interval) {
        this.interval = interval;
    }

    public long getInterval() {
        return interval;
    }

    public void setLast(long last) {
        this.last = last;
    }

    public long getLast() {
        return last;
    }

    // Public--------------------------------------------------------
    public long getNext() {
        long next = current;
        current += interval;

        if (wrap && (current> last)) {
            current -= ((1 + last) - first);
        }

        return next;
    }

    public long getPrevious() {
        current -= interval;

        if (wrap && (current< first)) {
            current += (last - first + 1);
        }

        return current;
    }

    public void setWrap(boolean wrap) {
        this.wrap = wrap;
    }

    public boolean isWrap() {
        return wrap;
    }

    public boolean hasNext() {
        return ((last == -1) || wrap) ? true : (current <=last);
    }

    public Object next() {
        return new Long(getNext());
    }

    public void remove() {
        // Do nothing
    

 

 

//项目中的应用

<s:set name="number" value="#parameters.num"/>  //num是从前一个页面中传递过来的参数
     <s:bean name="org.apache.struts2.util.Counter"id="counter">
       <s:param name="first" value="2"/>
       <s:param name="last" value="%{#number}"/>
       <s:iterator>  
             <s:property/>

       </s:iterator>
    </s:bean>

0 0