一、基本数据类型的绑定

页面

<form action="${pageContext.request.contextPath}/test.do" method="post">

        年龄: <input type="text" name="age" /> <br><br>

        <input type="submit"  value="提交"/>
</form>

 

后台代码

	@RequestMapping("/test")
public void test(int age){ System.out.println(age); }

     表单中input的name值和Controller的参数变量名保持一致,就能完成数据绑定,如果不一致可以使用@RequestParam注解。需要注意的是,如果Controller方法参数中定义的是基本数据类型,但是从页面提交过来的数据为null或者""的话,会出现数据转换的异常。也就是必须保证表单传递过来的数据不能为null或"",所以,在开发过程中,对可能为空的数据,最好将参数数据类型定义成包装类型。

 

二、包装类型

页面

<form action="${pageContext.request.contextPath}/test.do" method="post">

        年龄: <input type="text" name="age" /> <br><br>

        <input type="submit"  value="提交"/>
</form>

 

后台代码

	@RequestMapping("/test")
public void test(Integer age){ System.out.println(age); }

     和基本数据类型基本一样,不同之处在于,表单传递过来的数据可以为null或"",以上面代码为例,如果表单中num为""或者表单中无age这个input,那么,Controller方法参数中的num值则为null。

 

三、POJO类型

Person.java

public class Person{

	private Integer age;

	private String name;

	@Override
public String toString(){
return "Person [age=" + age + ", name=" + name + "]";
} //get set ....
}

 

页面

<form action="${pageContext.request.contextPath}/test.do" method="post">

        姓名:  <input type="text" name="name" /> <br>
年龄: <input type="text" name="age" /> <br><br> <input type="submit" value="提交"/>
</form>

 

后台代码

	@RequestMapping("/test")
public void test(Person person){ System.out.println(person.toString()); }

只需要表单的name值与对象的属性名一致即可。

 

四、复合类型的POJO

Person.java

public class Person{

	private Integer age;

	private String name;

	private Address address;

	//get set...
}

 

页面

<form action="${pageContext.request.contextPath}/test.do" method="post">

        姓名:  <input type="text" name="name" /> <br>
年龄: <input type="text" name="age" /> <br>
省份: <input type="text" name="address.province" /> <br>
城市: <input type="text" name="address.city" /> <br>
街道: <input type="text" name="address.street" /> <br><br> <input type="submit" value="提交"/>
</form>

 

后台代码

	@RequestMapping("/test")
public void test(Person person){ System.out.println(person.toString()); }

 

五、List

     将表单对象序列化成Json字符串提交,以List接收

页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title> <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.js"></script> <script type="text/javascript"> $(function(){ (function($){
// 先转换成{"name": ["Tom","Jerry"], "age": ["22","23"]}这种形式
$.fn.serializeJson=function(){
var serializeObj={};
var array=this.serializeArray();
var str=this.serialize();
$(array).each(function(){
if(serializeObj[this.name]){
if($.isArray(serializeObj[this.name])){
serializeObj[this.name].push(this.value);
}else{
serializeObj[this.name]=[serializeObj[this.name],this.value];
}
}else{
serializeObj[this.name]=this.value;
}
}); // 再转成[{"name": "Tom", "age": "22"},{"name": "Jerry", "age": "23"}]的形式
var vCount = 0;
// 计算json内部的数组最大长度
for(var item in serializeObj){
var tmp = $.isArray(serializeObj[item]) ? serializeObj[item].length : 1;
vCount = (tmp > vCount) ? tmp : vCount;
} if(vCount > 1) {
var jsonData2 = new Array();
for(var i = 0; i < vCount; i++){
var jsonObj = {};
for(var item in serializeObj) {
jsonObj[item] = serializeObj[item][i];
}
jsonData2.push(jsonObj);
}
return JSON.stringify(jsonData2);
}else{
return "[" + JSON.stringify(serializeObj) + "]";
}
};
})(jQuery); }); function submit(){ var param = $("#userForm").serializeJson(); $.ajax({
url:"${pageContext.request.contextPath}/test.do",
data:param,
type:"POST",
dataType:"json",
contentType:"application/json;charset=utf-8",
success:function(msg){ }
}); } </script> </head>
<body> <form id="userForm"> 姓名: <input type="text" name="name" /> <br>
年龄: <input type="text" name="age" /> <br><br> 姓名: <input type="text" name="name" /> <br>
年龄: <input type="text" name="age" /> <br><br> <a href="#" onclick="submit();">提交</a>
</form> </body>
</html>

SpringMVC基础学习(三)—参数绑定的更多相关文章

  1. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

  2. Python基础学习三

    Python基础学习三 1.列表与元组 len()函数:可以获取列表的元素个数. append()函数:用于在列表的最后添加元素. sort()函数:用于排序元素 insert()函数:用于在指定位置 ...

  3. SSM框架之SpringMVC(2)参数绑定及自定义类型转换

    SpringMVC(2)参数绑定及自定义类型转换 1.请求参数的绑定 1.1. 请求参数的绑定说明 1.1.1.绑定机制 表单提交的数据都是k=v格式的 username=haha&passw ...

  4. springmvc(三) 参数绑定、

    前面两章就介绍了什么是springmvc,springmvc的框架原理,并且会简单的使用springmvc以及ssm的整合,从这一章节来看,就开始讲解springmvc的各种功能实现,慢慢消化 --W ...

  5. springMVC学习(5)-参数绑定

    接着上一集,记录参数绑定的过程: springmvc中,接收页面提交的数据是通过方法形参来接收: 一.默认支持的类型: 在controller形参中添加如下类型的参数处理适配器会默认识别并进行赋值: ...

  6. SpringMVC(三) —— 参数绑定和数据回显

    参数绑定的过程:就是页面向后台传递参数,后台接受的一个过程. 默认支持的参数类型:(就是你在方法上以形参的形式去定义一下的类型,就可以直接使用它) HttpServletRequest HttpSer ...

  7. <SpringMvc>入门三 参数绑定

    1.get请求 <%--请求参数的绑定--%> <%--get请求参数--%> <a href="/param/testParam1?username=tom& ...

  8. JAVAEE——SpringMVC第一天:介绍、入门程序、架构讲解、SpringMVC整合MyBatis、参数绑定、SpringMVC和Struts2的区别

    1. 学习计划   第一天 1.SpringMVC介绍 2.入门程序 3.SpringMVC架构讲解 a) 框架结构 b) 组件说明 4.SpringMVC整合MyBatis 5.参数绑定 a) Sp ...

  9. SpringMVC之Controller和参数绑定

    在上一篇Spring+SpringMVC+Mybatis整合中说到了SSM的整合,并且在其中添加了一个简单的查询功能,目的只是将整个整合的流程进行一个梳理,下面在上一篇中工程的基础上再说一些关于Spr ...

随机推荐

  1. ASP.NET Web API 基本操作(CRUD)

    上一篇介绍了ASP.NET Web API的基本知识和原理,这一篇我们通过一个更直观的实例,对产品进行CRUD操作(Create/Read/Update/Delete)来继续了解一下它的基本应用. 创 ...

  2. Xcode的中常用到的快捷键,印象笔记中常用到的快捷键

    Xcode提供了很多快捷键,灵活使用快捷键可以提升开发效率.但对于初学者来说,一次性的去记住并掌握如此多的快捷键显然是不现实的,本文就是来帮助大家了解在iOS开发过程中,使用最频繁的一些快捷键. 1. ...

  3. Node.js~在linux上的部署~外网不能访问node.js网站的解决方法

    这是上一篇node.js部署到linux上的后续文章,当我们安装完node.js之后,建立了sailsjs的网站,然后在外面电脑上无法访问这个网站,这个问题我们如何去解决? 解决思路: 查看linux ...

  4. 读书笔记 effective c++ Item 25 实现一个不抛出异常的swap

    1. swap如此重要 Swap是一个非常有趣的函数,最初作为STL的一部分来介绍,它已然变成了异常安全编程的中流砥柱(Item 29),也是在拷贝中应对自我赋值的一种普通机制(Item 11).Sw ...

  5. 从0移植uboot (二) _uboot启动流程分析

    经过了上一篇的配置,我们已经执行make就可以编译出一个uboot.bin,但这还不够,首先,此时的uboot并不符合三星芯片对bootloader的格式要求,同时,此时的uboot.bin也没有结合 ...

  6. ERP实施规范化及示例——邮件沟通

    上门服务前 上门服务计划,要详细,提前发给客户,反复确定双方的行程 上门服务所需的常规文档(培训SOP,培训记录) 项目组内反复确认本次上门要完成的事项 …… 上门服务中 先跟老板沟通项目进展,本次上 ...

  7. vuejs数据双向绑定原理(get & set)

    前端的数据双向绑定指的是view(视图)和model(数据)两者之间的关系:view层是页面上展示给用户看的信息,model层一般是指通过http请求从后台返回的数据.view到model的绑定都是通 ...

  8. Java并发之任务的描述和执行

    简单概念 <Java编程思想>对并发概念的重要性阐述: Java是一种多线程语言,并且提出了并发问题,不管你是否意识到了.因此,有很多使用中的Java程序,要么只是偶尔工作,要么是在大多数 ...

  9. Jmeter+Badboy实战经验二(使用jmeter)

    1. 新建线程组: TestPlan--添加--Threads(Users)--线程组

  10. 使用curl操作InfluxDB

    这里列举几个简单的示例代码,更多信息请参考InfluxDB官方文档: https://docs.influxdata.com/influxdb/v1.1/ 环境: CentOS6.5_x64Influ ...