高级参数绑定(数组和List绑定)
1.绑定数组:
(1) 需求
在商品列表页面选中多个商品,然后删除。
(2). 需求分析
功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Controller,根据商品id删除商品信息。
我们演示可以获取id的数组即可
(4). Jsp修改
修改itemList.jsp页面,增加多选框,提交url是queryItem.action
- <form action="${pageContext.request.contextPath }/queryItem.action" method="post">
- 查询条件:
- <table width="100%" border=1>
- <tr>
- <td>商品id<input type="text" name="item.id" /></td>
- <td>商品名称<input type="text" name="item.name" /></td>
- <td><input type="submit" value="查询"/></td>
- </tr>
- </table>
- 商品列表:
- <table width="100%" border=1>
- <tr>
- <td>选择</td>
- <td>商品名称</td>
- <td>商品价格</td>
- <td>生产日期</td>
- <td>商品描述</td>
- <td>操作</td>
- </tr>
- <c:forEach items="${itemList }" var="item">
- <tr>
- <td><input type="checkbox" name="ids" value="${item.id}"/></td>
- <td>${item.name }</td>
- <td>${item.price }</td>
- <td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td>
- <td>${item.detail }</td>
- <td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>
- </tr>
- </c:forEach>
- </table>
- </form>
页面选中多个checkbox向controller方法传递
本身属于一个form表单,提交url是queryItem.action
(4) Controller
Controller方法中可以用String[]接收,或者pojo的String[]属性接收。两种方式任选其一即可。
定义QueryVo,如下图:
ItemController修改queryItem方法:
- /**
- * 包装类型 绑定数组类型,可以使用两种方式,pojo的属性接收,和直接接收
- *
- * @param queryVo
- * @return
- */
- @RequestMapping("queryItem")
- public String queryItem(QueryVo queryVo, Integer[] ids) {
- System.out.println(queryVo.getItem().getId());
- System.out.println(queryVo.getItem().getName());
- System.out.println(queryVo.getIds().length);
- System.out.println(ids.length);
- return "success";
- }
效果,如下图:
2. 将表单的数据绑定到List
(1) 需求
实现商品数据的批量修改。
(2). 开发分析
开发分析
1. 在商品列表页面中可以对商品信息进行修改。
2. 可以批量提交修改后的商品数据。
(3). 定义pojo
List中存放对象,并将定义的List放在包装类QueryVo中
使用包装pojo对象接收,如下图:
(4)JSP改造
前端页面应该显示的html代码,如下图:
分析发现:name属性必须是list属性名+下标+元素属性。
Jsp做如下改造:
- <c:forEach items="${itemList }" var="item" varStatus="s">
- <tr>
- <td><input type="checkbox" name="ids" value="${item.id}"/></td>
- <td>
- <input type="hidden" name="itemList[${s.index}].id" value="${item.id }"/>
- <input type="text" name="itemList[${s.index}].name" value="${item.name }"/>
- </td>
- <td><input type="text" name="itemList[${s.index}].price" value="${item.price }"/></td>
- <td><input type="text" name="itemList[${s.index}].createtime" value="<fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
- <td><input type="text" name="itemList[${s.index}].detail" value="${item.detail }"/></td>
- <td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>
- </tr>
- </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集合
- package cn.xm.jwxt.queryVo;
- import cn.xm.jwxt.bean.trainScheme.Trainningcapacitybaseinfo;
- import java.util.List;
- /**
- * @Author: qlq
- * @Description 接收list参数的vo
- * @Date: 17:56 2018/5/2
- */
- public class ListVo {
- /**
- * 接收培养方案能力集合
- */
- private List<Trainningcapacitybaseinfo> trainningcapacitybaseinfos;
- public List<Trainningcapacitybaseinfo> getTrainningcapacitybaseinfos() {
- return trainningcapacitybaseinfos;
- }
- public void setTrainningcapacitybaseinfos(List<Trainningcapacitybaseinfo> trainningcapacitybaseinfos) {
- this.trainningcapacitybaseinfos = trainningcapacitybaseinfos;
- }
- }
- package cn.xm.jwxt.bean.trainScheme;
- public class Trainningcapacitybaseinfo {
- private Integer capacityid;
- private String trainingschemeid;
- private String capacitysort;
- private String capacityname;
- private String capacitydescription;
- private String remark;
...get set...- }
Controller代码:
- @RequestMapping("/addTrainScheme")//保存培养方案基本信息和培养方案能力信息
- public String addTrainschemeinfo(Trainschemeinfo trainschemeinfo, ListVo listVo){
- String result = null;
- try {
- // result = trainschemeinfoService.addTrainschemeinfo(trainschemeinfo, trainningcapacitybaseinfos)?"添加成功":"添加失败";
- } catch (Exception e) {
- result="添加失败";
- logger.error("插入培养方案出错!",e);
- }
- return result;
- }
前台传的数据格式:
高级参数绑定(数组和List绑定)的更多相关文章
- SpringMVC学习笔记之二(SpringMVC高级参数绑定)
一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...
- springMVC第二天——高级参数绑定与其它特性
大纲摘要: 1.高级参数绑定 a) 数组类型的参数绑定 b) List类型的绑定 2.@RequestMapping注解的使用 3.Controller方法返回值 4.Springmvc中异常处理 5 ...
- JAVAEE——SpringMVC第二天:高级参数绑定、@RequestMapping、方法返回值、异常处理、图片上传、Json交互、实现RESTful、拦截器
1. 课前回顾 https://www.cnblogs.com/xieyupeng/p/9093661.html 2. 课程计划 1.高级参数绑定 a) 数组类型的参数绑定 b) List类型的绑定 ...
- (转)SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解
http://blog.csdn.net/yerenyuan_pku/article/details/72511749 高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编 ...
- 四 SpringMVC与页面之间的参数传递&高级参数的绑定&日期类型的转换
参数传递: 1 原生方式:使用Servlet API , request.getParameter("id"); 2 直接将请求参数作为Controller中的形参: publ ...
- knockoutJS学习笔记06:ko数组与模板绑定
前面已经介绍了基本的绑定和模板相关知识,接下来就看ko里的数组和模板绑定,数组和模板绑定应该是实际项目中用得比较多的,ko提供了很好的支持. 一.observaleArray 前面的监控属性都是单个对 ...
- SpringMVC由浅入深day01_12.4 pojo绑定_12.5自定义参数绑定实现日期类型绑定_12.6集合类
12.4 pojo绑定 页面中input的name和controller的pojo形参中的属性名称一致,将页面中数据绑定到pojo. 页面定义: controller的pojo形参的定义: 打断点测试 ...
- ASP.NET Core 2.2 十九. Action参数的映射与模型绑定
前文说道了Action的激活,这里有个关键的操作就是Action参数的映射与模型绑定,这里即涉及到简单的string.int等类型,也包含Json等复杂类型,本文详细分享一下这一过程.(ASP.NET ...
- Knockoutjs 实践入门 (3) 绑定数组
<form id="form1" runat="server"> <div> <!--text ...
随机推荐
- php扩展开发-变量
我们在php中用到的变量,在底层的C语言代码里是一个结构体,由四个成员组成typedef struct _zval_struct { zvalue_value value; /* 变量的值,也是一个结 ...
- django实现事务
1.导入模块 from django.db import transaction 2.使用方法 with transaction.atomic(): User.objects.create(name= ...
- iOS SDK中使用NSXMLParser解析XML(iphone网络篇三)
iOS SDK的NSXMLParser解析XML文档是事件驱动模式的,即采用SAX方式来解析XML格式文档.NSXMLParser在处理XML文档的过程中当遇到一些要素(元素.属性.CDATA块.评论 ...
- Sonya and Robots CodeForces - 1004C (思维题)
Sonya and Robots time limit per test 1 second memory limit per test 256 megabytes input: standard in ...
- Harbor HA部署-使用Ceph RADOS后端
1. 前言 Harbor 1.4.0版本开始提供了HA部署方式,和非HA的主要区别就是把有状态的服务分离出来,使用外部集群,而不是运行在本地的容器上.而无状态的服务则可以部署在多个节点上,通过配置上层 ...
- Lucene.Net 精品教程
http://www.cnblogs.com/piziyimao/archive/2013/01/31/2887072.html
- 【Luogu P1661】扩散
题目: 一个点每过一个单位时间就会向四个方向扩散一个距离,如图. 两个点$a$.$b$连通,记作$e(a,b)$,当且仅当$a$.$b$的扩散区域有公共部分.连通块的定义是块内的任意两个点$u$.$v ...
- 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 == "一年级": ...
- Python+Selenium练习篇之19-多窗口之间切换
本文来介绍如何处理driver在多窗口之间切换,想一下这样的场景,在页面A点击一个连接,会触发在新Tab或者新窗口打开页面B,由于之前的driver实例对象在页面A,但是你接下来的脚本是操作页面B的元 ...
- 非旋Treap总结 : 快过Splay 好用过传统Treap
非旋$Treap$ 其高级名字叫$Fhq\ Treap$,既然叫$Treap$,它一定满足了$Treap$的性质(虽然可能来看这篇的人一定知道$Treap$,但我还是多说几句:$Fhp\ Treap$ ...