1.绑定数组:

(1) 需求

在商品列表页面选中多个商品,然后删除。

(2). 需求分析

功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Controller,根据商品id删除商品信息。

我们演示可以获取id的数组即可

(4). Jsp修改

修改itemList.jsp页面,增加多选框,提交url是queryItem.action

  1. <form action="${pageContext.request.contextPath }/queryItem.action" method="post">
  2. 查询条件:
  3. <table width="100%" border=1>
  4. <tr>
  5. <td>商品id<input type="text" name="item.id" /></td>
  6. <td>商品名称<input type="text" name="item.name" /></td>
  7. <td><input type="submit" value="查询"/></td>
  8. </tr>
  9. </table>
  10. 商品列表:
  11. <table width="100%" border=1>
  12. <tr>
  13. <td>选择</td>
  14. <td>商品名称</td>
  15. <td>商品价格</td>
  16. <td>生产日期</td>
  17. <td>商品描述</td>
  18. <td>操作</td>
  19. </tr>
  20. <c:forEach items="${itemList }" var="item">
  21. <tr>
  22. <td><input type="checkbox" name="ids" value="${item.id}"/></td>
  23. <td>${item.name }</td>
  24. <td>${item.price }</td>
  25. <td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
  26. <td>${item.detail }</td>
  27.  
  28. <td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>
  29.  
  30. </tr>
  31. </c:forEach>
  32.  
  33. </table>
  34. </form>

页面选中多个checkbox向controller方法传递

本身属于一个form表单,提交url是queryItem.action

(4) Controller

Controller方法中可以用String[]接收,或者pojo的String[]属性接收。两种方式任选其一即可。

定义QueryVo,如下图:

ItemController修改queryItem方法:

  1. /**
  2. * 包装类型 绑定数组类型,可以使用两种方式,pojo的属性接收,和直接接收
  3. *
  4. * @param queryVo
  5. * @return
  6. */
  7. @RequestMapping("queryItem")
  8. public String queryItem(QueryVo queryVo, Integer[] ids) {
  9.  
  10. System.out.println(queryVo.getItem().getId());
  11. System.out.println(queryVo.getItem().getName());
  12.  
  13. System.out.println(queryVo.getIds().length);
  14. System.out.println(ids.length);
  15.  
  16. return "success";
  17. }

效果,如下图:

2. 将表单的数据绑定到List

(1) 需求

实现商品数据的批量修改。

(2). 开发分析

开发分析

1. 在商品列表页面中可以对商品信息进行修改。

2. 可以批量提交修改后的商品数据。

(3). 定义pojo

List中存放对象,并将定义的List放在包装类QueryVo中

使用包装pojo对象接收,如下图:

(4)JSP改造

前端页面应该显示的html代码,如下图:

分析发现:name属性必须是list属性名+下标+元素属性。

Jsp做如下改造:

  1. <c:forEach items="${itemList }" var="item" varStatus="s">
  2. <tr>
  3. <td><input type="checkbox" name="ids" value="${item.id}"/></td>
  4. <td>
  5. <input type="hidden" name="itemList[${s.index}].id" value="${item.id }"/>
  6. <input type="text" name="itemList[${s.index}].name" value="${item.name }"/>
  7. </td>
  8. <td><input type="text" name="itemList[${s.index}].price" value="${item.price }"/></td>
  9. <td><input type="text" name="itemList[${s.index}].createtime" value="<fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
  10. <td><input type="text" name="itemList[${s.index}].detail" value="${item.detail }"/></td>
  11.  
  12. <td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>
  13.  
  14. </tr>
  15. </c:forEach>

${current} 当前这次迭代的(集合中的)项

${status.first}   判断当前项是否为集合中的第一项,返回值为true或false

${status.last}    判断当前项是否为集合中的最

varStatus属性常用参数总结下:

${status.index}   输出行号,从0开始。

${status.count}   输出行号,从1开始。

${status.后一项,返回值为true或false

begin、end、step分别表示:起始序号,结束序号,跳跃步伐。

1.1.1. 效果

这里只演示List的绑定,能够接收到list数据。

可以拿到数据即可,不做数据库的操作。

测试效果如下图:

注意:接收List类型的数据必须是pojo的属性,如果方法的形参为ArrayList类型无法正确接收到数据。

例如:采用下面方式传递list集合

  1. package cn.xm.jwxt.queryVo;
  2.  
  3. import cn.xm.jwxt.bean.trainScheme.Trainningcapacitybaseinfo;
  4.  
  5. import java.util.List;
  6.  
  7. /**
  8. * @Author: qlq
  9. * @Description 接收list参数的vo
  10. * @Date: 17:56 2018/5/2
  11. */
  12. public class ListVo {
  13. /**
  14. * 接收培养方案能力集合
  15. */
  16. private List<Trainningcapacitybaseinfo> trainningcapacitybaseinfos;
  17.  
  18. public List<Trainningcapacitybaseinfo> getTrainningcapacitybaseinfos() {
  19. return trainningcapacitybaseinfos;
  20. }
  21.  
  22. public void setTrainningcapacitybaseinfos(List<Trainningcapacitybaseinfo> trainningcapacitybaseinfos) {
  23. this.trainningcapacitybaseinfos = trainningcapacitybaseinfos;
  24. }
  25. }
  1. package cn.xm.jwxt.bean.trainScheme;
  2.  
  3. public class Trainningcapacitybaseinfo {
  4. private Integer capacityid;
  5.  
  6. private String trainingschemeid;
  7.  
  8. private String capacitysort;
  9.  
  10. private String capacityname;
  11.  
  12. private String capacitydescription;
  13.  
  14. private String remark;
  15.     
       ...get set...
  16. }

Controller代码:

  1. @RequestMapping("/addTrainScheme")//保存培养方案基本信息和培养方案能力信息
  2. public String addTrainschemeinfo(Trainschemeinfo trainschemeinfo, ListVo listVo){
  3.  
  4. String result = null;
  5. try {
  6. // result = trainschemeinfoService.addTrainschemeinfo(trainschemeinfo, trainningcapacitybaseinfos)?"添加成功":"添加失败";
  7. } catch (Exception e) {
  8. result="添加失败";
  9. logger.error("插入培养方案出错!",e);
  10. }
  11. return result;
  12. }

前台传的数据格式:

高级参数绑定(数组和List绑定)的更多相关文章

  1. SpringMVC学习笔记之二(SpringMVC高级参数绑定)

    一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...

  2. springMVC第二天——高级参数绑定与其它特性

    大纲摘要: 1.高级参数绑定 a) 数组类型的参数绑定 b) List类型的绑定 2.@RequestMapping注解的使用 3.Controller方法返回值 4.Springmvc中异常处理 5 ...

  3. JAVAEE——SpringMVC第二天:高级参数绑定、@RequestMapping、方法返回值、异常处理、图片上传、Json交互、实现RESTful、拦截器

    1. 课前回顾 https://www.cnblogs.com/xieyupeng/p/9093661.html 2. 课程计划 1.高级参数绑定 a) 数组类型的参数绑定 b) List类型的绑定 ...

  4. (转)SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解

    http://blog.csdn.net/yerenyuan_pku/article/details/72511749 高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编 ...

  5. 四 SpringMVC与页面之间的参数传递&高级参数的绑定&日期类型的转换

    参数传递: 1 原生方式:使用Servlet  API  , request.getParameter("id"); 2 直接将请求参数作为Controller中的形参: publ ...

  6. knockoutJS学习笔记06:ko数组与模板绑定

    前面已经介绍了基本的绑定和模板相关知识,接下来就看ko里的数组和模板绑定,数组和模板绑定应该是实际项目中用得比较多的,ko提供了很好的支持. 一.observaleArray 前面的监控属性都是单个对 ...

  7. SpringMVC由浅入深day01_12.4 pojo绑定_12.5自定义参数绑定实现日期类型绑定_12.6集合类

    12.4 pojo绑定 页面中input的name和controller的pojo形参中的属性名称一致,将页面中数据绑定到pojo. 页面定义: controller的pojo形参的定义: 打断点测试 ...

  8. ASP.NET Core 2.2 十九. Action参数的映射与模型绑定

    前文说道了Action的激活,这里有个关键的操作就是Action参数的映射与模型绑定,这里即涉及到简单的string.int等类型,也包含Json等复杂类型,本文详细分享一下这一过程.(ASP.NET ...

  9. Knockoutjs 实践入门 (3) 绑定数组

    <form id="form1" runat="server">        <div>            <!--text ...

随机推荐

  1. php扩展开发-变量

    我们在php中用到的变量,在底层的C语言代码里是一个结构体,由四个成员组成typedef struct _zval_struct { zvalue_value value; /* 变量的值,也是一个结 ...

  2. django实现事务

    1.导入模块 from django.db import transaction 2.使用方法 with transaction.atomic(): User.objects.create(name= ...

  3. iOS SDK中使用NSXMLParser解析XML(iphone网络篇三)

    iOS SDK的NSXMLParser解析XML文档是事件驱动模式的,即采用SAX方式来解析XML格式文档.NSXMLParser在处理XML文档的过程中当遇到一些要素(元素.属性.CDATA块.评论 ...

  4. Sonya and Robots CodeForces - 1004C (思维题)

    Sonya and Robots time limit per test 1 second memory limit per test 256 megabytes input: standard in ...

  5. Harbor HA部署-使用Ceph RADOS后端

    1. 前言 Harbor 1.4.0版本开始提供了HA部署方式,和非HA的主要区别就是把有状态的服务分离出来,使用外部集群,而不是运行在本地的容器上.而无状态的服务则可以部署在多个节点上,通过配置上层 ...

  6. Lucene.Net 精品教程

    http://www.cnblogs.com/piziyimao/archive/2013/01/31/2887072.html

  7. 【Luogu P1661】扩散

    题目: 一个点每过一个单位时间就会向四个方向扩散一个距离,如图. 两个点$a$.$b$连通,记作$e(a,b)$,当且仅当$a$.$b$的扩散区域有公共部分.连通块的定义是块内的任意两个点$u$.$v ...

  8. python2.7运行报警告:UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal解决办法

    1. 程序源代码报错部分: #选择年级if grade == '幼升小': outline.nianji().pop(0).click()elif grade == "一年级": ...

  9. Python+Selenium练习篇之19-多窗口之间切换

    本文来介绍如何处理driver在多窗口之间切换,想一下这样的场景,在页面A点击一个连接,会触发在新Tab或者新窗口打开页面B,由于之前的driver实例对象在页面A,但是你接下来的脚本是操作页面B的元 ...

  10. 非旋Treap总结 : 快过Splay 好用过传统Treap

    非旋$Treap$ 其高级名字叫$Fhq\ Treap$,既然叫$Treap$,它一定满足了$Treap$的性质(虽然可能来看这篇的人一定知道$Treap$,但我还是多说几句:$Fhp\ Treap$ ...