Struts2标签实现for循环

来源:互联网 发布:厦门理工软件学院学费 编辑:程序博客网 时间:2024/05/09 20:02

在struts2及webwork中要实现如:

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

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

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

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

干脆把源码贴出来吧!

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

/*
* $Id: Counter.java 471756 2006-11-06 15:01:43Z husted $
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.   See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.   The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.   You may obtain a copy of the License at
*
*  
http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.   See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.struts2.util;

import java.io.Serializable;


/**
* A bean that can be used to keep track of a counter.
* <p/>
* Since it is an Iterator it can be used by the iterator tag
*
*/
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>

原创粉丝点击