Struts中多行数据的提交

转载 2006年05月28日 11:27:00

在Strust 中,我们可能经常要在 ActionForm 中使用其他 JavaBean 作为属性类型,这里就存在着如何使用好这些属性与 HTML Form 之间的数据交换。

如在注册书籍界面中,我们通常会将书籍的各种信息封装成一个单独的新的Class ,如BookBean ,包含以下属性:书籍编号 (bookId) ,书籍名称(bookName) ,出版社(company) ,作者(author) ,版本(state) 等等,这样条理也比较清晰,以下是这个 ActionForm 的部分代码:
public class RegisterBookForm extends ActionForm { 
        private String currentUsrId; 
        private Date currentDate; 
        private BookBean book = new BookBean();

        ………..
        public BookBean getBook() {
                  return book;
        }
}
其中BookBean为:
public class BookBean {
        private String bookId = null;
        private String bookName = null;
        private String company = null;
        private String author = null;
        private int state;
        public String getBookId() {
                 ........
        }
        public void setBookId(String bookId) {
                 .........
        }
        。。。。
}
在RegisterBookForm中我们需要将BookBean实例化(在reset 函数中需要重新实例化),这主要因为 Struts 的机制:如我们将 HTML 的 Form 元素(如 bookId )值传给 ActionForm ,Struts 需要执行的操作是 getBook().setBookId(String bookId) ,如果这时返回的book 对象为空的话,那么赋值如何进行,而且 Struts 也不会知道如何去实例化BookBean 。有时这些 JavaBean 的类型有可能是接口,实例化更是未知,所以关于 JavaBean 类型在 ActionForm 中的实例化,你需要自行完成,而且必须完成。至于在实际操作中判断 JavaBean 是否被进行过相关操作(不再是初始状态),你需要自行判断,其实也很简单,如可在BooBean 类中编写一个函数检验一下即可。

ActionForm 创建完毕后,我们需要在 Jsp Form 中引用这些 JavaBean 类型的属性值,那就很简单啦,只需采用“ Form 的属性名称”+“ . ”+“ JavaBean 中的属性名称”结构构成的名称付给相关元素即可。如:
<html:text property="book.bookId"/>
通过这种方式我们就可以处理好 ActionForm 中的 JavaBean 类型的属性值了。

实际的情况可能更复杂些,我们有时可能要提交多行数据到后台,而且行内的数据是相关的,如我们需要执行借书操作,要提交的是多本书的信息,这些行内的数据,如bookId ,bookName,company等都是和bookId相关的。这时我们构建的 ActionForm 中可能需要一个列表数据(ArrayList )类型来处理这种情况。以下是这个 ActionForm 的部分代码:
public class BorrowBookForm extends ActionForm {  
           private ArrayList books = new BorrowArrayList (); 
           …..
}

在以上代码中,我们同样处理了ArrayList 类型数据的初始化。Struts 在给ArrayList 中的对象赋值时,当然需要先获取ArrayList 数据,然后在获取ArrayList 中某一个对象(通过 Index ),最后给对象赋值。在这里想我们可以更详细点分析浏览器端传过来数据,字段值形式如下:books[0].bookName=StrutsInAction,Struts 获取 ActionForm 中的ArrayList 数据后,通过Index(此时为0)来获取ArrayList 中封装的 JavaBean 对象,然而此时ArrayList 是空的(尽管初始化了,但是没有数据),是无法取得封装的对象的,因此我们要在Struts 获取 ArrayList 中封装的对象的时候给它创建一个,这样就保证对象的获取和赋值的成功进行,我们新建一个 BorrowArrayList 类,继承 ArrayList ,只要重写 get(int index) 方法即可,其实很简单,代码如下:
import java.util.ArrayList;

/**
 * <strong>BorrowArrayList</strong>
 * <p>书籍借阅时所有书籍列表</p>
 * 
 * @author  RenZW
 * @version 1.0 2005.09.2
 * @since   1.0
 */
public class BorrowArrayList extends ArrayList {
    /*
     * (non-Javadoc)
     *
     * @see java.util.List#get(int)
     */
    public Object get(int index) {
        while (index >= size()) {
            add(new BookBean());
        }
        return super.get(index);
    }
}这样我们就完成可以多行数据提交的 ActionForm 设计,这里还有点提醒,如果从浏览器端传过来的行索引是跳跃是的,如缺少中间行,且首尾行index 相差很大的话,这种方式可能不太适合。这种多行提交形式比较适合对固定行的数据处理。

下面我们就看看如何在 Jsp 中使用这个 ActionForm ,其实只需要执行一个循环即可:
<logic:iterate id="books"  name=" BorrowBookForm"  property="books " indexId="index">
      <html:text name="books" property="bookId" indexed="true" />
      <html:text name="books" property="bookName" indexed="true"/>
      .........
</logic:iterate>

这里我们再分析一下,代码中出现的“books”都是ActionForm 中的ArrayList 数据类型变量名称,请确保一致,这也是方便提交到后台的数据接收。indexed="true" 可以确保生成的 html 元素的名称唯一,不要缺少这个声明

通过以上步骤,我们完成了多行数据的提交所有环节,这样 Struts 就会完成其他所有的事情,我们的代码逻辑和实现也简单多了。


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=486643

Struts1 table提交多行数据

 转自:http://www.javaeye.com/topic/169559    在struts框架中常常会遇到多行表单的情况, 如何有效的利用struts框架提供的自动收集机制来处理呢? 这里提...
  • xiemk2005
  • xiemk2005
  • 2010-11-09 20:15:00
  • 4375

struts使用list提交多行表单

转自:http://laravel.iteye.com/blog/460926
  • YzhilongY
  • YzhilongY
  • 2014-11-13 18:46:03
  • 607

jQuery 实现批量提交表格多行数据

批量提交用jquery操作起来还是很方便的,主要的思路就是 在动态生成表格时每一行都存下这条数据的唯一id,然后监听选择,把选中的数据放入数组,最后提交到后台就OK了。 先上一部分代码(这是表头以及一...
  • qq_15824553
  • qq_15824553
  • 2017-09-22 14:25:32
  • 1845

form提交多行相同数据

前台多个form数据向后台传递,包括多个相同行 这篇文章是用来测试我本地md上传到csdn的,相同功能的文章在我的博文里的上一篇有一个简化的,那个看起来方便 首先是前台 ...
  • sdzhangshulong
  • sdzhangshulong
  • 2018-02-11 10:43:48
  • 101

struts中多行提交问题

  • 2011年08月28日 21:05
  • 6KB
  • 下载

struts多行数据提交解决方案

Struts中ActionForm类型对象的javaBean属性何时初使化?Struts中涉及到多行提交问题时如何处理?在Strust 中,我们可能经常要在 ActionForm 中使用其他 Java...
  • xddouble
  • xddouble
  • 2007-06-13 08:48:00
  • 484

struts多行数据提交解决方案

Struts中ActionForm类型对象的javaBean属性何时初使化?Struts中涉及到多行提交问题时如何处理?在Strust 中,我们可能经常要在 ActionForm 中使用其他 Java...
  • lix511
  • lix511
  • 2007-05-18 15:02:00
  • 1837

bootstrap-table+多行数据组合提交(java版)

1、bootstra-table插件介绍 Bootstrap-table是一个基于bootstrap样式的表格组件,可以通过简单的配置,即可以动态生成表格,从而方便使用。2、boot...
  • weixin_37620246
  • weixin_37620246
  • 2017-09-08 15:34:40
  • 1029

jqGrid 多行数据修改并一起提交

var lastsel;var list=[]; $(function () { $("#gridTable").jqGrid({ url: '@Url...
  • guorun18
  • guorun18
  • 2015-04-14 13:19:49
  • 1421

struts多行表单数据提交

多行表单数据提交 使用struts提交多行数据 封装xml
  • zhyt08_126
  • zhyt08_126
  • 2010-08-31 15:24:00
  • 920
收藏助手
不良信息举报
您举报文章:Struts中多行数据的提交
举报原因:
原因补充:

(最多只允许输入30个字)