1、代码法
<%
ValueStack valueStack = (ValueStack)request.getAttribute("struts.valueStack");
String[] books = (String[])valueStack.findValue("books");
for(String book : books){
%>
<tr>
<td>BookName:</td>
<td><%=book%></td>
</tr>
<%
}
%>
这样虽然不好看,但是以后将HT 组件对象化后操作,用得上。
示例——actioin
public class GetBooksAction implements Action{
private String[] books;
public String[] getBooks() {
return books;
}
public void setBooks(String[] books) {
this.books = books;
}
public String execute() throws Exception{
String user = (String)ActionContext.getContext().getSession().get("user");
if( user != null && user.equals("gqltt") ){
BookService bookService = new BookService();
setBooks(bookService.getBooks());
return SUCCESS;
}
return LOGIN;
}
}
示例——jsp
<body>
<table>
<caption>Show Books</caption>
<%
ValueStack valueStack = (ValueStack)request.getAttribute("struts.valueStack");
String[] books = (String[])valueStack.findValue("books");
for(String book : books){
%>
<tr>
<td>BookName:</td>
<td><%=book%></td>
</tr>
<%
}
%>
</table>
</body>
注意加入:<%@ page import="com.opensymphony.xwork2.util.*" %>
2、标签法
<s:iterator value="books" status="st">
<s:if test="#st.odd == true">
<tr style="background-color:#cccccc">
</s:if>
<s:else>
<tr>
</s:else>
<td><s:property/></td>
</tr>
</s:iterator>
对 status 属性的 深入操作,给其 index 属性添加一个固定值
<s:iterator value="listDouble" status="st">
<s:property value="#st.index + 4"/>
<s:property/><br/>
</s:iterator>