天天看點

在Struts2使用集合對象儲存表單送出參數

先上圖,有這樣的業務場景,一次表單送出需要批量添加n本書籍的資訊

在Struts2使用集合對象儲存表單送出參數

我們來看下如何用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!

在Struts2使用集合對象儲存表單送出參數

結果展示出我們的action已經可以接受頁面送出過來的批量表單參數,這是struts2的一個非常有用的功能