在Struts2使用集合对象保存表单提交参数

来源:互联网 发布:imagesloaded.min.js 编辑:程序博客网 时间:2024/06/04 23:20

先上图,有这样的业务场景,一次表单提交需要批量添加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;}}
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;}@Overridepublic 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的一个非常有用的功能

原创粉丝点击