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. 原生JavaScript之深度克隆

    先看一下克隆成功后的结果 深度克隆就是将obj的属性克隆到obj1上面,并且在obj上面修改属性不影响obj1上面的属性. 1.先把所有的值都遍历一遍(看是引用值和原始值)用for ( var pro ...

  2. 浅谈算法——Manacher

    字符串算法在各大高级比赛中均有用到,所以,学习好字符串算法对我们而言十分重要.那么,今天我们就给大家介绍一个快速求回文串的算法,Manacher算法,我们也习惯性叫它马拉车算法. 一.引入 首先我们要 ...

  3. Poj 2947 widget factory (高斯消元解同模方程)

    题目连接: http://poj.org/problem?id=2947 题目大意: 有n种类型的零件,m个工人,每个零件的加工时间是[3,9],每个工人在一个特定的时间段内可以生产k个零件(可以相同 ...

  4. 人工智能(七)逻辑Agent

    一.逻辑 逻辑是一种可以从中找出结论的形式化语言. 句法(规则)用语言定义句子. 语义定义句子的含义.定义一个句子的真假性. 二.蕴含 即一个事情逻辑上是另一个事情的必然结果:KB ╞ α 知识库KB ...

  5. 题解报告:hdu 1098 Ignatius's puzzle

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1098 题目中文是这样的: 伊格内修斯在数学上很差,他遇到了一个难题,所以他别无选择,只能上诉埃迪. 这 ...

  6. Android 线程池系列教程(1)目录

    Sending Operations to Multiple Threads 1.Dependencies and prerequisites Android 3.0 (API Level 11) o ...

  7. Farseer.net轻量级开源框架 中级篇:探究ORM(Mapping)

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: SQL执行报告 下一篇:Farseer.net轻量级开源框架 中级篇: Cooki ...

  8. 最全的Java面试宝典

    一. 前言部分 从享受生活的角度上来说:“程序员并不是一种最好的职业,我认为两种人可以做程序员,第一,你不做程序员,你就没有什么工作可做,或者说是即使有可以做的工作但是你非常不愿意去做:第二,你非常痴 ...

  9. Python界面编程之六----布局

    布局(转载于–学点编程吧)通过实践可知采用了布局之后能够让我们的程序在使用上更加美观,不会随着窗体的大小发生改变而改变,符合我们的使用习惯. 绝对位置程序员以像素为单位指定每个小部件的位置和大小. 当 ...

  10. 6-Java-C(打印大X)

    题目描述: 小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度. 为了便于比对空格,所有的空白位置都以句点符来代替. 要求输入两个整数m n,表示笔的宽度,X的高度.用空格分开 ...