1 绑定简单类型

要根据id查询商品数据,需要从请求的参数中把请求的id取出来。Id应该包含在Request对象中。可以从Request对象中取id。

public ModelAndView itemEdit(HttpServletRequest request) { 

  //从Request中取id String strId = request.getParameter("id");

}

如果想获得Request对象只需要在Controller方法的形参中添加一个参数即可。Springmvc框架会自动把Request对象传递给方法。

处理器形参中添加如下类型的参数处理适配器会默认识别并进行赋值 绑定简单数据类型

当请求的参数名称和处理器形参名称一致时会将请求参数与形参进行绑定。从Request取参数的方法可以进一步简化。

 @RequestMapping("/itemEdit")
public String itemEdit(Integer id, Model model) {
Items items = itemService.getItemById(id); //向jsp传递数据
model.addAttribute("item", items); //设置跳转的jsp页面
return "editItem";
}

mvc底层调用request 赋值

参数类型推荐使用包装数据类型,因为基础数据类型不可以为null  整形:Integer、int 字符串:String 单精度:Float、float 双精度:Double、double 布尔型:Boolean、boolean 说明:对于布尔类型的参数,请求的参数值为true或false。

方法形参中的名字跟页面传递过来的名字保持一致

2 使用pojo接收表单数据

如果提交的参数很多,或者提交的表单中的内容很多的时候可以使用pojo接收数据。要求pojo对象中的属性名和表单中input的name属性一致。 页面定义如下;

<input type="text" name="name"/> 
<input type="text" name="price"/>
@RequestMapping("/queryitem")
public String queryItem(Pojo pojo) {
System.out.println(pojo.getName());
System.out.println(pojo.getPrice());
return null;
}

请求的参数名称和pojo的属性名称一致,会自动将请求参数赋值给pojo的属性

提交的表单中不要有日期类型的数据,否则会报400错误。如果想提交日期类型的数据需要用到后面的自定义参数绑定的内容。

3 绑定包装pojo

页面定义:

<input type="text" name="items.name" />
<input type="text" name="items.price" /> @RequestMapping("/queryitem")
public String queryItem(QueryVo queryVo) {
System.out.println(queryVo.getItems().getName());
System.out.println(queryVo.getItems().getPrice());
return null;
}

4 高级参数绑

绑定数组

Jsp中实现

<c:forEach items="${itemList }" var="item">
<tr>
<td>
<input name="ids" value="${item.id}" type="checkbox">
</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>

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

@RequestMapping("/queryitem")
public String queryItem(QueryVo queryVo, String[] ids) {
System.out.println(queryVo.getItems().getName());
System.out.println(queryVo.getItems().getPrice());
System.out.println(ids.toString());
return null;
} public calss QueryVo{
private String[] ids; public String[] getIds(){
return ids;
} public void setIds(String[] ids) {
this.ids=ids;
}
}

将表单的数据绑定到List

需求分析

要想实现商品数据的批量修改,需要在商品列表中可以对商品信息进行修改,并且可以批量提交修改后的商品数据。

接收商品列表的pojo

List中存放对象,并将定义的List放在包装类中,使用包装pojo对象接收

public class QueryVo {
  private Items items;   private List<Items> itemsList;   public List<Items> getItemsList() {
   return itemsList;
  }
  
  public void setItemsList(List<Items> itemsList) {
   this.itemsList = itemsList;
  }   public Items getItems() {
  return items;
  }   public void setItems(Items items) {
  this.items = items;
  }
}

jsp页面的编写

    <c:forEach items="${itemList }" var="item" varStatus="i">
<tr>
<td><input type="checkbox" value="${item.id}" name="ids" /></td>
<td><input type="text" value="${item.name }" name="itemsList[${i.index}].name" /></td>
<td><input type="text" value="${item.price }" name="itemsList[${i.index}].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>

varStatus属性常用参数总结下: ${status.index} 输出行号,从0开始。 ${status.count} 输出行号,从1开始。 ${status.current} 当前这次迭代的(集合中的)项 ${status.first} 判断当前项是否为集合中的第一项,返回值为true或false ${status.last} 判断当前项是否为集合中的最后一项,返回值为true或false begin、end、step分别表示:起始序号,结束序号,跳跃步伐。

Contrller层的编写
@RequestMapping("/queryitem")
public String queryItem(QueryVo queryVo, String[] ids) {
System.out.println(queryVo.getItems().getName());
System.out.println(queryVo.getItems().getPrice());
System.out.println(ids.toString());
return null;
}

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

5 自定义参数绑定

由于日期数据有很多种格式,所以springmvc没办法把字符串转换成日期类型。所以需要自定义参数绑定。前端控制器接收到请求后,找到注解形式的处理器适配器,对RequestMapping标记的方法进行适配,并对方法中的形参进行参数绑定。在springmvc这可以在处理器适配器上自定义Converter进行参数绑定。如果使用<mvc:annotation-driven/>可

自定义Converter
public class DateConverter implements Converter<String, Date> {

@Override
public Date convert(String source) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
return simpleDateFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
配置Converter

在springmvc.xml中告mvc配置了转换器

<!-- 转换器配置 -->

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">

  <property name="converters">

    <set> <bean class="cn.itcast.springmvc.convert.DateConverter"/> </set>

  </property> 

</bean>

然后再在springmvc.xml中配置

<!-- 加载注解驱动 -->
<mvc:annotation-driven conversion-service="conversionService"/>

SpringMVC参数接收的更多相关文章

  1. 【springmvc Request】 springmvc请求接收参数的几种方法

    通过@PathVariabl注解获取路径中传递参数 转载请注明出处:springmvc请求接收参数的几种方法 代码下载地址:http://www.zuida@ima@com/share/1751862 ...

  2. SpringMVC控制器接收不了PUT提交的参数的解决方案

    摘要: SpringMVC控制器接收不了PUT提交的参数的解决方案 这次改造了下框架,把控制器的API全部REST化,不做不知道,SpringMVC的REST有各种坑让你去跳,顺利绕过它们花了我不少时 ...

  3. 《SpringMVC从入门到放肆》十、SpringMVC注解式开发(复杂参数接收)

    上一篇我们学习了简单的参数接收方式,以及对编码的统一处理.今天我们来接收对象参数. 一.接收对象参数 jsp页面: <%@ page language="java" impo ...

  4. 《SpringMVC从入门到放肆》九、SpringMVC注解式开发(简单参数接收)

    上一篇我们学习了注解式开发的配置方式并写了一个小Demo跑起来.今天我们来学习注解开发的参数接收.处理器方法中的常用参数有五类,这些参数会在系统调用时由系统自动赋值,即程序员可以在方法中直接使用.具体 ...

  5. SpringMVC中参数接收

    /** *  * SpringMVC中参数接收 * 1.接收简单类型 int String * 2.可以使用对象pojo接收 * 3.可以使用集合数据接收参数 * 页面: name="ids ...

  6. SpringMVC请求参数接收总结

    前提 在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结.SpringMVC中处理控制器参数的接口是HandlerMethodArgumentRes ...

  7. springMVC怎么接收日期类型的参数?

    springMVC怎么接收日期类型的参数? springMVC的controller中用实体接受页面传递的参数,并且实体中的属性类型为日期类型,怎么接收呢?如果接收不到会进不到controller中. ...

  8. springmvc Controller接收前端参数的几种方式总结

    (1) 普通方式-请求参数名和Controller方法的参数一致 @Controller @RequestMapping("/param") public class TestPa ...

  9. SpringMVC请求参数接收总结(一)

    前提 在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结.SpringMVC中处理控制器参数的接口是HandlerMethodArgumentRes ...

随机推荐

  1. nginx静态资源服务器简单配置

    有时候我们可以把服务器的一些文件放在固定目录以便下载,比如image,css,js等.就可以使用nginx转发静态资源. 参考链接:https://blog.csdn.net/name_is_wl/a ...

  2. elasticsearch全文搜索

    1.创建索引 PUT 192.168.100.102:9200/news 2.创建mapping POST 192.168.100.102:9200/news/new/_mapping { " ...

  3. git修改push的注释信息

    修改还未push的注释: git commit --amend 修改后保存退出. 刚刚push到远端还没有人其他人下载或改动的: git commit --amend进入修改页面修改注释信息,修改后: ...

  4. saltstack实战笔记

    #运维管理工具 ansible #支持ssh,不需要客户端 saltstack #也是只是ssh,不需要客户端的 安装架构是,master /minion 安装salt的依赖模块 python zer ...

  5. mysql主从同步异常原因及恢复

    mysql主从同步异常原因及恢复 前言 mysql数据库做主从复制,不仅可以为数据库的数据做实时备份,保证数据的完整性,还能做为读写分离,提升数据库的整体性能.但是,mysql主从复制经常会因为某些原 ...

  6. centos7开启路由转发

    centos7开启路由转发 编辑/etc/sysctl.conf,添加一下内容. vim /etc/sysctl.conf net.ipv4.ip_forward=1 net.ipv4.conf.al ...

  7. Android偏好设置(6)应用和监听各偏好参数

    Reading Preferences By default, all your app's preferences are saved to a file that's accessible fro ...

  8. ORA-00020: maximum number of processes (300) exceeded

    SQL> select count(*) from v$session; COUNT(*)---------- 98 SQL> select count(*) from v$process ...

  9. AJPFX关于构造器的总结

    构造器        构造器定义        构造器作用        构造器特点        构造器修饰符        默认构造器        构造器重载        构造器和一般函数的区 ...

  10. Bmob使用心得

    1.在 Project 的 build.gradle 文件中添加 Bmob的maven仓库地址,示例如下:(注意文字说明部分): allprojects { repositories { jcente ...