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. cocos2dx 坐标系 -转

    (原文出处找不到了) 无论是搞2d还是3d开发,最需要搞清楚的就是坐标系,这部分混乱的话就没啥奔头了.所以玩cocos2d,一上来就先把各种与坐标有关的东西搞清楚. 基本的两个坐标系:屏幕坐标系和GL ...

  2. JS 去除字符串中的空格

    1. 去掉字符串前后所有空格: 代码如下: function Trim(str) { return str.replace(/(^\s*)|(\s*$)/g, ""); } 说明: ...

  3. laravel重要概念和知识点

    Service Provider: 一个laravel service provider就是一个注册IoC container binding的类.实际上,laravel本身就自包含了一堆管理核心框架 ...

  4. 如何在linux中从源代码编译安装nodejs?

    $ sudo yum groupinstall 'Development Tools'安装开发环境$ wget https://nodejs.org/dist/v0.12.2/node-v0.12.2 ...

  5. Qt之QHeaderView添加复选框

    简述 前面分享了QTableView中如何添加复选框.本节主要介绍QTableView中的表头-QHeaderView添加复选框的功能,下面以水平表头为例,垂直表头类似! 简述 效果 QHeaderV ...

  6. 事务&视图和索引

    一:事务 1.含义:事务是一个不可分割的整体,事务中的多个执行过程,同生共死.要么都执行成功,要么都执行失败. 事务必须具备以下四个属性,(简称:ACID): ①.原子性(Atomicity):事务的 ...

  7. HDFS 整体把握

    对于HDFS这样一个分布式文件系统,它的目的是为了实现在多台廉价X86服务器上实现大文件存储.     HDFS 是仿造GFS 设计出来的. 如图所示, 这种实现方案是一种采取有一个中心节点, 多个数 ...

  8. PHP学习笔记02——简易计算器

    <!DOCTYPE html> <html> <head> <title>PHP简易计算器</title> </head> &l ...

  9. 菜鸟学习笔记3——jQuery 选择器

    jQuery 元素选择器 jQuery 使用 CSS 选择器来选取 HTML 元素. $("p") 选取 <p> 元素. $("p.intro") ...

  10. POJ 2594 Treasure Exploration (可相交最小路径覆盖)

    题意 给你张无环有向图,问至少多少条路径能够覆盖该图的所有顶点--并且,这些路径可以有交叉. 思路 不是裸的最小路径覆盖,正常的最小路径覆盖中两个人走的路径不能有重复的点,而本题可以重复. 当然我们仍 ...