Struts2标签实现for循环

时间:2024-01-21 14:31:39

感悟:但是不建议使用这种方法,按照MVC框架的思想 ,应该把业务更多放在后台。前台尽量只进行数据展示。

转自:http://blog.csdn.net/guandajian/article/details/7334756

在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

干脆把源码贴出来吧!

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

 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:bean name="org.apache.struts2.util.Counter" id="counter">
<s:param name="first" value="1" />
<s:param name="last" value="#request.num" />
<s:iterator>
<tr bgcolor="ffffff" align="center">
<td>${rs.f_courseId}&nbsp;</td>
<td>${rs.f_coursename}&nbsp;</td>
<td>${rs.f_term}&nbsp;</td>
<td>${rs.f_week}&nbsp;</td>
<td>${rs.f_credit}&nbsp;</td>
<td>${rs.f_courseStart}&nbsp;</td>
<td>${rs.f_courseEnd}&nbsp;</td>
<td><a href="">查看</a> <a href="">删除</a></td>
</tr>
</s:iterator>
</s:bean>