以下为Struts2 中循环迭代的使用示例. 在我写的demo中我用了3重迭代,虽然有些麻烦,目的是为了显示迭代的逻辑性和可读性。
用户User -----1:N ----- 书本Book
书本Book -----1:N ----- 出版商 Publisher (就是多个出版商出奔这本书)
以下为测试源码和截图效果:
testIterator.jsp
<
%@ page contentType
=
"
text/html; charset=GBK
"
language
=
"
java
"
%
>
< %@taglib prefix = " s " uri = " /struts-tags " % >
< % class User
{
private String userName;
private String passWord;
private java.util.List bookList;
public String getPassWord()
{
return passWord;
}
public void setPassWord( String passWord)
{
this.passWord = passWord;
}
public String getUserName()
{
return userName;
}
public void setUserName( String userName)
{
this.userName = userName;
}
public java.util.List getBookList()
{
return bookList;
}
public void setBookList(java.util.List bookList)
{
this.bookList = bookList;
}
}
class Book
{
private String bookName;
private String price;
private java.util.List publisherList;
public String getBookName()
{
return bookName;
}
public void setBookName( String bookName)
{
this.bookName = bookName;
}
public String getPrice()
{
return price;
}
public void setPrice( String price)
{
this.price = price;
}
public java.util.List getPublisherList()
{
return publisherList;
}
public void setPublisherList(java.util.List publisherList)
{
this.publisherList = publisherList;
}
}
class Publisher
{
private String publisherName;
public String getPublisherName()
{
return publisherName;
}
public void setPublisherName( String publisherName)
{
this.publisherName = publisherName;
}
}
% >
< %
java.util.List userList = new java.util.ArrayList();
java.util.List bookList = new java.util.ArrayList();
java.util.List publisherList = new java.util.ArrayList();
Publisher publisher = new Publisher();
publisher.setPublisherName( " 华中师大 " );
publisherList.add(publisher);
publisher = new Publisher();
publisher.setPublisherName( "中国大学 " );
publisherList.add(publisher);
Book book = new Book();
book.setBookName( " Math " );
book.setPrice( " 50 " );
book.setPublisherList(publisherList);
bookList.add(book);
book = new Book();
book.setBookName( " Sicence " );
book.setPrice( " 100 " );
book.setPublisherList(publisherList);
bookList.add(book);
bookList.add(book);
User u = new User();
u.setUserName( " Jack " );
u.setPassWord( " 66666 " );
u.setBookList(bookList);
userList.add(u);
u = new User();
u.setUserName( " Tom " );
u.setPassWord( " 55555 " );
u.setBookList(bookList);
userList.add(u);
u = new User();
u.setUserName( " Shawn " );
u.setPassWord( " 00000 " );
u.setBookList(bookList);
userList.add(u);
request.setAttribute( " users " , userList);
% >
< table border = " 1 " width = " 400 " border = " 1 " >
< tr >
< th > 姓名 </ th >
< th > 密码 </ th >
< th > 书籍 </ th >
< th >& nbsp; </ th >
</ tr >
< s:iterator value = " #request.users " id = " usersResult " status = " st " >
< tr < s: if test = " #st.odd " > style = " background-color:#bbbbbb " </ s: if >>
< td >< s: property value = " userName " /></ td >
< td >< s: property value = " passWord " /></ td >
< td >
< table align = " center " border = " 1 " width = " 100% " >
< tr bgcolor = " red " >
< th > 书名 </ th >
< th > 价格 </ th >
< th > 出版社 </ th >
</ tr >
< s:iterator value = " bookList " id = " bookName " status = " st " >
< tr >
< TD >< s: property value = " bookName " /></ TD >
< TD >< s: property value = " price " /></ TD >
< td >
< table align = " center " border = " 1 " >
< s:iterator value = " publisherList " id = " publisher " status = " st " >
< tr >
< TD >< s: property value = " publisherName " /></ TD >
</ tr >
</ s:iterator >
</ table >
</ td >
</ tr >
</ s:iterator >
</ table >
</ td >
< TD >
< s: if test = " #st.first " > 是首元素 </ s: if >
< s: elseif test = " #st.last " > 是末元素 </ s: elseif >
< s: else > 是非首末元素 </ s: else >
</ TD >
</ tr >
</ s:iterator >
< hr >
< tr ></ tr >
< tr ></ tr >
< tr ></ tr >
< tr ></ tr >
< s:iterator value = " #request.users " id = " usersResult " status = " st " >
< tr < s: if test = " #st.odd " > style = " background-color:#bbbbbb " </ s: if >>
< td >< s: property value = " userName " /></ td >
< td >< s: property value = " passWord " /></ td >
< td >
< table align = " center " >
< s: set value = " #usersResult " name = " ppp " />
< ! -- s: property value = " #ppp.bookList " / --> < ! -- 写法与上面的不同A -->
< s:iterator value = " #ppp.bookList " id = " bookName " status = " st " >
< s: set value = " #bookName " name = " userIndex " />
< tr >
< TD >< s: property value = " #userIndex.bookName " /></ TD > < ! -- 写法与上面的不同B -->
< TD >< s: property value = " #userIndex.price " /></ TD >
< TD >
< s: if test = " #st.first " > 首元素 </ s: if >
< s: elseif test = " #st.last " > 末元素 </ s: elseif >
< s: else > 中间元素 </ s: else >
</ TD >
</ tr >
</ s:iterator >
</ table >
</ td >
< TD >
< s: if test = " #st.first " > 是首元素 </ s: if >
< s: elseif test = " #st.last " > 是末元素 </ s: elseif >
< s: else > 是非首末元素 </ s: else >
</ TD >
</ tr >
</ s:iterator >
</ table >
< %@taglib prefix = " s " uri = " /struts-tags " % >
< % class User
{
private String userName;
private String passWord;
private java.util.List bookList;
public String getPassWord()
{
return passWord;
}
public void setPassWord( String passWord)
{
this.passWord = passWord;
}
public String getUserName()
{
return userName;
}
public void setUserName( String userName)
{
this.userName = userName;
}
public java.util.List getBookList()
{
return bookList;
}
public void setBookList(java.util.List bookList)
{
this.bookList = bookList;
}
}
class Book
{
private String bookName;
private String price;
private java.util.List publisherList;
public String getBookName()
{
return bookName;
}
public void setBookName( String bookName)
{
this.bookName = bookName;
}
public String getPrice()
{
return price;
}
public void setPrice( String price)
{
this.price = price;
}
public java.util.List getPublisherList()
{
return publisherList;
}
public void setPublisherList(java.util.List publisherList)
{
this.publisherList = publisherList;
}
}
class Publisher
{
private String publisherName;
public String getPublisherName()
{
return publisherName;
}
public void setPublisherName( String publisherName)
{
this.publisherName = publisherName;
}
}
% >
< %
java.util.List userList = new java.util.ArrayList();
java.util.List bookList = new java.util.ArrayList();
java.util.List publisherList = new java.util.ArrayList();
Publisher publisher = new Publisher();
publisher.setPublisherName( " 华中师大 " );
publisherList.add(publisher);
publisher = new Publisher();
publisher.setPublisherName( "中国大学 " );
publisherList.add(publisher);
Book book = new Book();
book.setBookName( " Math " );
book.setPrice( " 50 " );
book.setPublisherList(publisherList);
bookList.add(book);
book = new Book();
book.setBookName( " Sicence " );
book.setPrice( " 100 " );
book.setPublisherList(publisherList);
bookList.add(book);
bookList.add(book);
User u = new User();
u.setUserName( " Jack " );
u.setPassWord( " 66666 " );
u.setBookList(bookList);
userList.add(u);
u = new User();
u.setUserName( " Tom " );
u.setPassWord( " 55555 " );
u.setBookList(bookList);
userList.add(u);
u = new User();
u.setUserName( " Shawn " );
u.setPassWord( " 00000 " );
u.setBookList(bookList);
userList.add(u);
request.setAttribute( " users " , userList);
% >
< table border = " 1 " width = " 400 " border = " 1 " >
< tr >
< th > 姓名 </ th >
< th > 密码 </ th >
< th > 书籍 </ th >
< th >& nbsp; </ th >
</ tr >
< s:iterator value = " #request.users " id = " usersResult " status = " st " >
< tr < s: if test = " #st.odd " > style = " background-color:#bbbbbb " </ s: if >>
< td >< s: property value = " userName " /></ td >
< td >< s: property value = " passWord " /></ td >
< td >
< table align = " center " border = " 1 " width = " 100% " >
< tr bgcolor = " red " >
< th > 书名 </ th >
< th > 价格 </ th >
< th > 出版社 </ th >
</ tr >
< s:iterator value = " bookList " id = " bookName " status = " st " >
< tr >
< TD >< s: property value = " bookName " /></ TD >
< TD >< s: property value = " price " /></ TD >
< td >
< table align = " center " border = " 1 " >
< s:iterator value = " publisherList " id = " publisher " status = " st " >
< tr >
< TD >< s: property value = " publisherName " /></ TD >
</ tr >
</ s:iterator >
</ table >
</ td >
</ tr >
</ s:iterator >
</ table >
</ td >
< TD >
< s: if test = " #st.first " > 是首元素 </ s: if >
< s: elseif test = " #st.last " > 是末元素 </ s: elseif >
< s: else > 是非首末元素 </ s: else >
</ TD >
</ tr >
</ s:iterator >
< hr >
< tr ></ tr >
< tr ></ tr >
< tr ></ tr >
< tr ></ tr >
< s:iterator value = " #request.users " id = " usersResult " status = " st " >
< tr < s: if test = " #st.odd " > style = " background-color:#bbbbbb " </ s: if >>
< td >< s: property value = " userName " /></ td >
< td >< s: property value = " passWord " /></ td >
< td >
< table align = " center " >
< s: set value = " #usersResult " name = " ppp " />
< ! -- s: property value = " #ppp.bookList " / --> < ! -- 写法与上面的不同A -->
< s:iterator value = " #ppp.bookList " id = " bookName " status = " st " >
< s: set value = " #bookName " name = " userIndex " />
< tr >
< TD >< s: property value = " #userIndex.bookName " /></ TD > < ! -- 写法与上面的不同B -->
< TD >< s: property value = " #userIndex.price " /></ TD >
< TD >
< s: if test = " #st.first " > 首元素 </ s: if >
< s: elseif test = " #st.last " > 末元素 </ s: elseif >
< s: else > 中间元素 </ s: else >
</ TD >
</ tr >
</ s:iterator >
</ table >
</ td >
< TD >
< s: if test = " #st.first " > 是首元素 </ s: if >
< s: elseif test = " #st.last " > 是末元素 </ s: elseif >
< s: else > 是非首末元素 </ s: else >
</ TD >
</ tr >
</ s:iterator >
</ table >
效果图:
姓名 | 密码 | 书籍 | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Jack | 66666 |
| 是首元素 | ||||||||||||||||||
Tom | 55555 |
| 是非首末元素 | ||||||||||||||||||
Shawn | 00000 |
| 是末元素 | ||||||||||||||||||
Jack | 66666 |
| 是首元素 | ||||||||||||||||||
Tom | 55555 |
| 是非首末元素 | ||||||||||||||||||
Shawn | 00000 |
| 是末元素 |