先上图,有这样的业务场景,一次表单提交需要批量添加n本书籍的信息
我们来看下如何用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;
- }
- }
- 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;
- }
- }
- <%@ 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>
4.在AddBookAction类同目录下建立一个AddBookAction-conversion.properties文件,内容如下
- Element_books=com.crazycoder2010.struts2.bean.Book
5.Run it!
结果展示出我们的action已经可以接受页面提交过来的批量表单参数,这是struts2的一个非常有用的功能