文档章节

springmvc 中的data bind机制

lemos
 lemos
发布于 2016/11/19 00:47
字数 918
阅读 9
收藏 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
粉丝 6
博文 176
码字总数 86431
作品 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
spring mvc的表单类型转换(custom property editor)

spring mvc的表单类型转换太强大了,目前用到了两个简单的, 一个是将表单中的file自动映射成byte[],这样文件上传(如果使用blob)就无需写任何代码了。 另一个是将表单中的yyyy-MM-dd格式映...

cyper
2012/10/28
0
2
SpringMVC数据绑定全面示例(复杂对象,数组等)

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

耀子
2015/04/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

阿里云API网关使用教程

API 网关(API Gateway)提供高性能、高可用的 API 托管服务,帮助用户对外开放其部署在 ECS、容器服务等阿里云产品上的应用,提供完整的 API 发布、管理、维护生命周期管理。用户只需进行简...

mcy0425
28分钟前
4
0
解决远程登陆误按ctrl+s锁屏假死恢复

使用putty时,偶尔发生屏幕假死,不能输入等情况。 后来发现,只要数据ctrl+s,就会假死;输入ctrl+q就可以恢复过来。 很多刚从windows转移到linux上来工作的朋友,在用vi/vim编辑文件时,常常...

HJCui
31分钟前
0
0
@Transactional

事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于...

asdf08442a
35分钟前
2
0
widows下强制解除8080端口占用问题

使用win+R打开命令窗口 输入以下命令查看哪个任务占用了8080端口 netstat -ano |findstr "8080" 然后通过任务id强制关闭占用该端口的进程 tskill 10044 // 自己的试情况而定,这个ID是LISTE...

_Artisan
45分钟前
2
0
productFlavors简单实用

最近项目中,不同环境需要配置的参数越来越多,为了减少修改代码次数。研究了一下productFlavors的使用方式,总结如下 1. as3.0以上版本使用productFlavors时需要指定一个flavorDimensions,...

火云
47分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部