文档章节

springmvc 中的data bind机制

lemos
 lemos
发布于 2016/11/19 00:47
字数 918
阅读 19
收藏 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
粉丝 7
博文 180
码字总数 91421
作品 0
芜湖
后端工程师
私信 提问
Spring事务管理机制的实现原理-动态代理 .

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

swk998741
2014/03/17
0
0
Spring的基础标签库提供了简单易用的数据绑定和显示功能

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

BigMaN
2011/08/17
0
0
说说Spring中的WebDataBinder

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

凯文加内特
2015/05/25
0
0
SpringMVC数据绑定全面示例(复杂对象,数组等)

转载一篇写的不错的文章,文章链接为 : http://www.xdemo.org/springmvc-data-bind/

耀子
2015/04/16
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
09/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Apache防盗链配置,Directory访问控制,FilesMatch进行访问控制

防盗链配置 通过限制referer来实现防盗链的功能 配置前,使用curl -e 指定referer [root@test-a test-webroot]# curl -e "http://www.test.com/1.html" -x127.0.0.1:80 "www.test.com/1.jpg......

野雪球
39分钟前
1
0
RxJava threading

因为Rx针对异步系统设计,并且Rx也自然支持多线程,所以新的Rx开发人员有时会假设Rx默认是多线程的。在其他任何事情之前,重要的是澄清Rx默认是单线程的。 除非另有说明,否则每次调用onNex...

woshixin
39分钟前
0
0
Python的安装及文件类型、变量

一、为什么学习python 服务于大数据、人工智能、自动化运维。 简单易学 代码简洁 薪资高 近几年越来越火 二、Python的安装 linux 系统默认安装, CentOS7 默认安装了python2.7 安装ipython y...

枫叶云
47分钟前
0
0
JeeSite 4.x 树形结构的表设计和用法

有些同仁对于 JeeSite 4 中的树表设计不太了解,本应简单的方法就可实现,却写了很多复杂的语句和代码,所以有了这篇文章。 在 JeeSite 4 中的树表设计我还是相对满意的,这种设计比较容易理...

ThinkGem
53分钟前
23
0
0022-如何永久删除Kafka的Topic

1.问题描述 使用kafka-topics --delete命令删除topic时并没有真正的删除,而是把topic标记为:“marked for deletion”,导致重新创建相同名称的Topic时报错“already exists”。 2.问题复现...

Hadoop实操
56分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部