1、前台jsp界面:

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@include file="../include/taglib.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script src="js/common/jquery-1.9.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
  //对每行的第一个复选框实现简单的单选
  $("#tablelist input[name=goodscheck]").click(function(){
    $("#tablelist input[name=goodscheck]").attr('checked',false);
    $(this).get(0).checked=true;
  });

//添加一行,就是将第一个tr复制,默认有一个tr
  $("#addbtn").click(function(){
    var tr =$("#tablelist tr").eq(0);
    var temptr=$(tr).clone(true); //复制tr
    $("input",temptr).val(''); //将tr下的值清空
    $("#tablelist").append(temptr);
  });
//删除一行,至少有两个tr才能删除
  $("#delbtn").click(function(){
    if($("#tablelist tr").length>1){
      var checks = $("#tablelist input[name=goodscheck]:checked");
      if(checks && checks.length==1){
      $(checks).parent().parent().remove();
    }
  }
});
//提交表单
  $("#submit").click(function(){
    refresh('tablelist');
    testForm.submit();
  });

});
//后台接收的是数组,因此需要刷新数组的索引值。如果刷新提交的索引为userTests[0]和userTests[2](假如userTests[1]被删除),
//后台的List集合的大小为3,索引为1的对象被认为是null.
function refresh(jq){
  $("#"+jq+" tr").each(function(j){
    $(this).children('td').children('input').each(function(){
      var curname = $(this).attr('name');
      if(curname){
        var curnamearr = curname.split(".") ;
        if(curnamearr && curnamearr.length>1){
          var val="";
          for(var i=1;i<curnamearr.length;i++){
            val+="."+curnamearr[i];
          }
        $(this).attr('name','userTests['+j+']'+val);
      }
    }
  });
});
}
</script>
</head>
<body>
<s:form action="login/test.do" id='testForm'>
  <table id="tablelist">
    <tr>
      <td><input type="checkbox" name="goodscheck"></td>
      <td><input type="text" name="userTests[0].name"/></td>
      <td><input type="text" name="userTests[0].jtCode"/></td>
      <td><input type="text" name="userTests[0].code"/></td>
      <td><input type="text" name="userTests[0].operator.code"/></td>
    </tr>
  </table>
  <s:submit id="submit" value="提交"></s:submit>
</s:form>
<br>
  <input type="button" id="addbtn" value="添加">
  <input type="button" id="delbtn" value="删除">
</body>
</html>

2、后台action代码:

  private List<UserTest> userTests; //get set方法省略 

  public void test() {
    if (userTests!=null) {
      for(UserTest userTest: userTests){
        logger.info(" ============ "+userTest +" operator: "+userTest.getOperator().getCode());
      }
    }else{
      logger.info(" ============ userTest is null ");
    }
  }

3、javaBean对象

public class UserTest {
  private String name;
  private String code;
  private String jtCode;
  private TBLOperator operator;

  ...get set

public class TBLOperator implements Serializable {
  private String code;

4、测试数据:

13:23:21,524 INFO [LoginAction] ============ UserTest [name=1, code=, jtCode=, operator=com.cjonline.foundation.evisa.entity.TBLOperator@1225261] operator: 11
13:23:21,524 INFO [LoginAction] ============ UserTest [name=2, code=, jtCode=, operator=com.cjonline.foundation.evisa.entity.TBLOperator@355104] operator: 22
13:23:21,524 INFO [LoginAction] ============ UserTest [name=4, code=, jtCode=, operator=com.cjonline.foundation.evisa.entity.TBLOperator@59e5ec] operator: 44444444
13:23:21,524 INFO [LoginAction] ============ UserTest [name=5, code=, jtCode=, operator=com.cjonline.foundation.evisa.entity.TBLOperator@5f77e] operator: 5555555555

struts2传递List对象(复合对象)的更多相关文章

  1. Activity之间传递数据或数据包Bundle,传递对象,对象序列化,对象实现Parcelable接口

    package com.gaojinhua.android.activitymsg; import android.content.Intent; import android.os.Bundle; ...

  2. 3ds max学习笔记-- 复合对象运算

    1,ProBoolean(超级布尔) 栗子: 新建一长方体,两个圆柱体,如下: 选择底部长方体,进入[复合对象],修改[操作],单击[拾取操作对象B],点击圆柱: 效果如下,线面较多: 高级布尔效果图 ...

  3. mybatis由浅入深day01_ 7输入映射(7.1传递pojo的包装对象_7.2#{}与${}_7.3传递简单类型_7.4传递pojo对象_7.5传递hashmap)

    7 输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 7.1 传递pojo的包装对象 7.1.1 需求 完成用户信息的综合查询,需要 ...

  4. [Objective-C语言教程]复合对象(33)

    在Objective-C中,可以在类集群中创建子类,该类集合定义了一个嵌入在其中的类. 这些类对象是复合对象.你可能想知道什么是类集群,下面首先了解什么是类集群. 1. 类集群 类集群是基础框架广泛使 ...

  5. Intent之对象传递(Parcelable传递对象和对象集合)

    接着上一篇文章,以下我们讨论一下怎样利用Parcelable实现Intent之间对象的传递 一.实现对象传递 首先创建User.java实现Parcelable接口: package org.yayu ...

  6. MVC传递数据-传递对象或对象集合

    前言 本文主要介绍从View(或者js)文件向Controller提交对象或者对象集合.比方.将表格中的一行数据作为一个对象提交.或将多行数据作为一个集合提交到Controller. 回想 从View ...

  7. JSP内置对象--request对象

    本文主要介绍JSP中的request对象 request对象的主要方法: setAttribute(String name,Object):设置名字为name的request的参数值 getAttri ...

  8. O-C相关-06:对象与对象的关系

    对象与对象的关系 1.对象与对象的关系 依赖 关联 组合 常常讨论对象与对象关系时会提供两个属于:内聚性,耦合性 内聚一般指功能上的指向性 耦合一般指关联上的依赖性 2.依赖: 对象之间最弱的一种关联 ...

  9. Django运算表达式与Q对象/F对象

    Django运算表达式与Q对象/F对象 1 模型查询 概述: 1 查询集:表示从数据库中获取的对象的集合 2 查询集可以有多个过滤器,通过 逻辑运算符连接 3 过滤器就是一个函数,基于所给的参数限制查 ...

  10. js中对象和对象创建方法

    这一次我们来说一说在JavaScript中经常会用到的一个复杂基本类型,对象,先从对象的属性讲起,再讲对象的创建方法,基本涵盖了创建对象的各种方法,大家一起学习呀~ 一.对象 要掌握对象的使用及继承, ...

随机推荐

  1. 了解thinkphp(二)

    ThinkPHP的核心文件: Library文件夹下的Think文件夹目录 ThinkPHP的入口文件是: ThinkPHP.php , 我们在创建项目时都要引入这个入口文件!!! 一 , 项目的部署 ...

  2. 【HDOJ】5657 CA Loves Math

    1. 题目描述对于给定的$a, n, mod, a \in [2,11], n \in [0, 10^9], mod \in [1, 10^9]$求出在$[1, a^n]$内的所有$a$进制下的数并且 ...

  3. 我的ipad应用备份

    听歌: 网易云音乐,QQ音乐 摄影: CameraConnect,Replay,PhotoBooth,PhotoCollage,画中画相机,Creative Shape, 简拼,玩图,PicsArt, ...

  4. Android中的PopupWindow详解

      Android的对话框有两种:PopupWindow和AlertDialog.它们的不同点在于: AlertDialog的位置固定,而PopupWindow的位置可以随意 AlertDialog是 ...

  5. git cheatsheet小抄本

    https://www.kernel.org/pub/software/scm/git/docs/git.html

  6. Machine Learning for hackers读书笔记(六)正则化:文本回归

    data<-'F:\\learning\\ML_for_Hackers\\ML_for_Hackers-master\\06-Regularization\\data\\' ranks < ...

  7. HDU 5326 work (回溯,树)

    题意:给一棵树,每个结点的子树下的结点都是它的统治对象,问有多少个统治对象数目为k的结点? 思路:每个结点都设一个cnt来记数,只要将每个结点往上回溯,直到树根,经过的每个结点都将计数器加1.最后再扫 ...

  8. php 在函数内引用全局变量 讲解引用

    <?php $var1 = "Example variable"; $var2 = ""; function global_references($use ...

  9. 【英语】Bingo口语笔记(32) - 口语中的弱读

  10. IP碎片原理:攻击和防护

    为了加深理解IP协议和一些DoS攻击手段大家有必要看看以下内容,也许对你理解这个概念有所帮助.先来看看IP碎片是如何产生的吧.         一.IP碎片是如何产生的       链路层具有最大传输 ...