iterator 标签对集合进行迭代,这里的集合包含List、Set 和数组,也可以对Map集合进行迭代。
代码片段如下:
private List<Book> books; //定义一个List集合
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
private BookService bService = new BookService();
//获取书籍
public String getBookMethod(){
books = BookDatabase.books;
return "getBookOk";
}
获取List集合并迭代:
<s:iterator value="books" var="b">
<tr>
<td align="center"><s:property value="#b.bookName" /></td>
<td align="center"><s:property value="#b.bookAuthor" /></td>
<td align="center"><s:property value="#b.bookPrice" /></td>
</tr>
</s:iterator>
使用<s:iterator…/>标签对集合进行迭代输出时,可指定的属性:
-
value:可选属性,该属性指定被迭代的集合。如果没有指定value属性,则迭代ValueStack栈顶的集合。
-
var:可选属性,该属性指定将正在迭代的集合元素以该名称放入ValueStack中。
-
status:可选属性,指定将正在迭代对象的 IteratorStatus 实例以该名称存入 Stack Context中。每次迭代都会有一个 IteratorStatus 实例,该实例提供如下方法:
(1) int getCount():返回当前迭代几个元素
(2)int getIndex():返回当前迭代元素的索引
(3)boolean isEven():返回当前迭代元素的索引是否为偶数
(4)boolean isFirst():返回当前迭代元素是否是第一个元素
(5)boolean isLast():返回当前迭代元素是否是最后一个
(6)boolean isOdd():返回当前迭代元素的索引是否是奇数用法:
<s:iterator status="st">
<s:if test="#st.isOdd()">
<tr>******</tr>
</s:if>
<s:else>******</s:else>
</s:iterator>
迭代时遇到的问题:迭代输出数据时不显示或为空,这是因为没有写入数据,封装属性是使用了 private string bName; (b代表书籍)这样的格式,使得set、get方法为 public void setbName(){…}的格式;
解决:将属性改为bookName即可,这样的set、get 方法为public void setBookName(){…}
迭代session的值:
<s:iterator value="#session.fileItems" var="fItem">
<a href="downloadAction?inputPath=${fItem.filePath}&contentType=${fItem.fileName}&downFileName=${fItem.fileName}">${fItem.fileName}</a><br>
</s:iterator>