先上圖,有這樣的業務場景,一次表單送出需要批量添加n本書籍的資訊
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuoXNP5EM1gTMzMjNxMTMfBzLchTMvwVOwETMwIzLcRnbl1GajFGd0F2LcRXZu5ibkN3YukGavw1LcpDc0RHaiojIsJye.gif)
我們來看下如何用Struts2的特性來一步搞定它!
1.建立model類Book
package com.crazycoder2010.struts2.bean;
public class Book {
private String name;
private int price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
2.編寫業務處理Action類AddBookAction
package com.crazycoder2010.struts2.action;
import java.util.ArrayList;
import java.util.List;
import com.crazycoder2010.struts2.bean.Book;
import com.opensymphony.xwork2.ActionSupport;
public class AddBookAction extends ActionSupport {
private static final long serialVersionUID = 8136233165580827673L;
private List<Book> books = new ArrayList<Book>();
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
@Override
public String execute() throws Exception {
for(Book book : books){
System.out.println(book.getName()+":"+book.getPrice());
}
return SUCCESS;
}
}
3.編寫頁面add_book.jsp
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
</head>
<body>
<s:form action="addBook" method="post">
<s:iterator value="new int[3]" var="book" status="status">
<label>Name:</label>
<s:textfield name="%{'books['+#status.index+'].name'}" theme="simple"></s:textfield>
<label>Price:</label>
<s:textfield name="%{'books['+#status.index+'].price'}" theme="simple"></s:textfield>
<br/>
</s:iterator>
<s:submit value="Add"></s:submit>
</s:form>
</body>
</html>
這個表單中我們模拟建立3個book資訊,每個book有name和price屬性,這裡需要特别注意的是表單元素的命名需要和我們AddBookAction中的List<Book> books 保持一直,名字分别為books[0].name,books[0].price;books[1].name,books[1].price,依次類推
4.在AddBookAction類同目錄下建立一個AddBookAction-conversion.properties檔案,内容如下
Element_books=com.crazycoder2010.struts2.bean.Book
其中Element_作為字首books就是這個AddBookAction中用來接受list參數的參數名
5.Run it!
結果展示出我們的action已經可以接受頁面送出過來的批量表單參數,這是struts2的一個非常有用的功能