文档章节

springmvc 中的data bind机制

lemos
 lemos
发布于 2016/11/19 00:47
字数 918
阅读 22
收藏 0

一、使用@RequestParam将请求参数绑定至方法参数

使用这种方法,不必要求请求的参数名和形参名保持一致。并且,如果参数使用了该注解,则该参数默认是必须提供的(页面必须保证此值存在),但你也可以把该参数标注为非必须的:只需要将@RequestParam注解的required属性设置为false即可(比如,@RequestParam(value="id", required=false))。

@Controller
@RequestMapping("/pets")
@SessionAttributes("pet")
public class EditPetForm {
    // ...
    @RequestMapping(method = RequestMapping.GET)
    public String setupForm(@RequestParam("petId") int petId, ModelMap model) {
        Pet pet = this.clinic.loadPet(petId);
        model.addAttribute("pet", pet);
        return "petForm";
    }

    // ,..
}

二、Stirng 类型的参数绑定

  1. Http请求传递的数据都是字符串String类型的
  2. 属性编辑器(PropertyEditor)可以将string 类型转换成我们需要的java对象( 通过使用setAsText方法)。
  3. 我们可以自定义PropertyEditor,只要继承PropertyEditorSupport类并重写setAsText方法就可以。 Spring中有很多自定义的属性编辑器,都在spring-beans jar包下的org.springframework.beans.propertyeditors包里。

三、数组参数的绑定

  1. 需求 商品的批量删除,用户可以选择多个商品,批量删除。
  2. 表现层的实现 关键:将页面选择的商品id --> controller方法形参中; 方法形参使用数组( items_id)接收页面的请求的多个商品id.

页面定义:

<script language="JavaScript">
        <%-- 提交表单 --%>
        function deleteItems() {
            document.itemsForm.action = "${pageContext.request.contextPath }/items/deleteItems.action";
            document.itemsForm.submit();
        }
        function queryItems() {
            document.itemsForm.action = "${pageContext.request.contextPath }/items/queryItems.action";
            document.itemsForm.submit();
        }
</script>

<td><input type="button" value="批量删除" onclick="deleteItems()"/></td>

<%--多选框 --%>
<td><input type="checkbox" name="items_id" value="${item.id}"/></td>

controller方法定义:

@RequestMapping("deleteItems")
public String deleteItems(Integer[] items_id) {


      //调用service批量删除商品
      return "success";
}

四、List 参数的绑定

需求:批量提交数据时,将提交的数据绑定到List<pojo> 中 ,比如:成绩录入(批量提交) 本例子需求,批量修改,在页面输入多个商品的信息,将多个商品提交到controller方法中.

表现层:controller方法定义: 1.进入商品修改界面(样式,参考商品列表实现 2. 批量修改提交 3. 既然页面没有list属性.可以自己在pojo中设置一个List实例变量,并提供getter、setter方法 4. 那么,就可以通过包装pojo接收,页面传给List实例变量的数据。页面传来的每个数据都是list的元素(每个属性都用一个对象来包装),并在遍历时以其varStatus的值来标识下标.

页面

<script language="JavaScript">
        <%-- 提交表单 --%>
        function editItemsAll() {
            document.itemsForm.action = "${pageContext.request.contextPath }/items/editItemsAll.action";
            document.itemsForm.submit();
        }
        function editItemsQuery() {
            document.itemsForm.action = "${pageContext.request.contextPath }/items/editItemsQuery.action";
            document.itemsForm.submit();
        }
</script>

<td><input type="button" value="查询" onclick="editItemsQuery()"/></td>
<td><input type="button" value="批量修改提交" onclick="editItemsAll()"/></td>

<!--商品列表-->
<table width="100%" border=1>
      <tr>
          <td>商品名称</td>
          <td>商品价格</td>
          <td>生产日期</td>
          <td>商品描述</td>
          <td>操作</td>
      </tr>
      <c:forEach items="${itemsList }" var="item" varStatus="status">
          <tr>
              <td><input name="itemsCustomList[${status.index}].name" value="${item.name }"/></td>
              <td><input name="itemsCustomList[${status.index}].price" value="${item.price }"/></td>
              <td><input name="itemsCustomList[${status.index}].createtime"
                         value="<fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td>
              <td><input name="itemsCustomList[${status.index}].detail" value="${item.detail }"/></td>
          </tr>
      </c:forEach>
</table>

controller方法:

//批量修改显示页面
@RequestMapping("/editItemsQuery")
public String editItemsQuery(Model model, ItemsQueryVo itemsQueryVo) throws Exception {

      List<ItemsCustom> itemsList = itemsService.findItemsList(itemsQueryVo);
      model.addAttribute("itemsList", itemsList);

      return "items/editItemsQuery";
}

//修改提交页面
@RequestMapping("/editItemsAll")
public String editItemsAll(ItemsQueryVo itemsQueryVo) {

      //注入service操作
        
      return "success";
}

五、map 参数的绑定

map 与list类似.

© 著作权归作者所有

共有 人打赏支持
lemos
粉丝 8
博文 184
码字总数 92482
作品 0
芜湖
后端工程师
私信 提问
Spring事务管理机制的实现原理-动态代理 .

分析一下Spring事务管理机制的实现原理。由于Spring内置AOP默认使用动态代理模式实现,我们就先来分析一下动态代理模式的实现方 法。动态代理模式的核心就在于代码中不出现与具体应用层相关联...

swk998741
2014/03/17
0
0
JPA、Hibernate、Mybatis的区别

1.概念: Hibernate :Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。着力点对象与对象之间...

Jack088
2018/12/19
0
0
说说Spring中的WebDataBinder

还是老规矩,开门见山。 我们开发的时候经常会从html,jsp中将参数传到后台,可是经常会遇到的一种情况就是传过来的数据到后台要组装成一种对象的格式,最常见的就是enum类型了。这时候sprin...

凯文加内特
2015/05/25
0
0
聊聊redisTemplate对lettuce的封装

序 本文主要研究一下redisTemplate对lettuce的封装 RedisTemplate spring-data-redis-2.0.10.RELEASE-sources.jar!/org/springframework/data/redis/core/RedisTemplate.java redisTemplate......

go4it
2018/09/15
0
0
Spring的基础标签库提供了简单易用的数据绑定和显示功能

Spring的基础标签库提供了简单易用的数据绑定和显示功能。 配置基础标签库: 需要将Spring安装包中的spring.tld复制到项目的WEB-INF目录下,并在web.xml中配置该标签库: <taglib> 然后在JSP...

BigMaN
2011/08/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

2亿用户背后的Flutter应用框架Fish Redux

背景 在闲鱼深度使用 Flutter 开发过程中,我们遇到了业务代码耦合严重,代码可维护性糟糕,如入泥泞。对于闲鱼这样的负责业务场景,我们需要一个统一的应用框架来摆脱当下的开发困境,而这也...

阿里云官方博客
31分钟前
2
0
C++生成随机数:高斯/正态分布(gaussian/normal distribution)

高斯分布也称为正态分布(normal distribution)。 常用的成熟的生成高斯分布随机数序列的方法由Marsaglia和Bray在1964年提出,C++版本如下: #include <stdlib.h>#include <math.h> d...

天蚕宝衣
35分钟前
1
0
从 Jenkins 迁移到 Jenkins X:一场持续交付之旅

背景 在 dailymotion,我们信奉 DevOps 最佳实践,并且重度使用了 Kubernetes。我们的部分产品(并非全部)已经部署在 Kubernetes 上。在迁移我们的广告技术平台时,为了赶时髦(作者你这么直...

微笑向暖wx
39分钟前
2
0
Kafka Producer Consumer

Producer API org.apache.kafka.clients.producer.KafkaProducer 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:...

编程SHA
46分钟前
1
0
在centos上搭建git服务器并自动同步代码

在centos上搭建git服务器并自动同步代码 tortoisegit git centos linux 5k 次阅读 · 读完需要 15 分钟 0 参考文章 CentOS安装Git实现多人同步开发 centos中GIT服务器搭建及使用密钥连接 简述...

linjin200
48分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部