SpringMVC之数据传递一
之前的博客中也说了,mvc中数据传递是最主要的一部分,从url到Controller、从view到Controller、Controller到view以及Controller之间的数据传递。今天主要学习数据传递到Controller的几种方式.
一、从url传递
1.@RequestParam的使用
常见的url中会是?name=XXX&pwd=XXX的这种,如果想获取name,pwd,可以使用.@RequestParam。假如参数是可选参数,可以设置required=false,默认是true,value也要与url的对应。
@RequestMapping(value="/index.do")
public ModelAndView login(HttpServletRequest request,HttpServletResponse response,@RequestParam("name")String name,@RequestParam(value="pwd",required=false) String pwd){
ModelAndView modelAndView = new ModelAndView("Index");
System.out.println("name:"+name+" pwd:"+pwd);
return modelAndView;
}

2.@PathVariable的使用
有的url的格式是url/param1/param2这种,这种获取值可以使用.@PathVariable。
@RequestMapping(value="/login/{name}/{pwd}",method=RequestMethod.GET)
public ModelAndView login1(HttpServletRequest request,HttpServletResponse response,@PathVariable("name") String name,@PathVariable("pwd") String pwd){
ModelAndView modelAndView = new ModelAndView("Index");
System.out.println("name:"+name+" pwd:"+pwd);
return modelAndView;
}

上面两种传递值得方式也打印出了日志.第一个打印出了name,密码为null,第二种方式打印了name和pwd.

二、从view传递
这里主要用form表单演示。
<%@ 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>
</head>
<body> <form id="form1" name="myform" method="post" action="../../login.do" >
用户:<input type="text" name="name"/>
密码:<input type="password" name="pwd"/>
<input type="submit"/>
</form>
</body>
</html>
1.直接将请求参数名作为Controller中方法的形参
这里在Controller中设置参数是页面form表单控件的name属性。
@RequestMapping(value="/login.do",method=RequestMethod.POST)
public ModelAndView login2(HttpServletRequest request,HttpServletResponse response,String name,String pwd){
ModelAndView modelAndView = new ModelAndView("Index");
System.out.println("name:"+name+" pwd:"+pwd);
return modelAndView;
}
2.使用Pojo对象(就是封装的类,类中封装的字段作为参数)绑定请求参数值,原理是利用Set的页面反射机制找到User对象中的属性
这个使用pojo有点类似之前学的,我们可以定义一个User类,然后Controller的参数类型是User.form表单的action这里要注意下要设置成action="../../login3.do".
package com.cyw.web.model;
public class User {
private String name;
private String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
@RequestMapping(value="/login3.do")
public ModelAndView login3(HttpServletRequest request,HttpServletResponse response,User user){
ModelAndView modelAndView = new ModelAndView("Index");
System.out.println("name:"+user.getName()+" pwd:"+user.getPwd());
return modelAndView;
}
3.使用原生的Servlet API 作为Controller 方法的参数
不仅是通过view传到Controller,url传参数到Controller也一样.既然有HttpServletRequest,我们可以通过request对象获取相关参数。
String username=request.getParameter("name");
System.out.println("username:"+username);
4.传递数组
<form id="form1" name="myform" method="post" action="../../login.do" >
<input type="checkbox" name="hobby" value="1" />跑步
<input type="checkbox" name="hobby" value="2" />游泳
<input type="checkbox" name="hobby" value="3" />麻将
<input type="checkbox" name="hobby" value="4" />吃
<input type="submit"/>
</form>
</body>
</html>
@RequestMapping(value="/login.do",method=RequestMethod.POST)
public ModelAndView login2(HttpServletRequest request,HttpServletResponse response,String[] hobby){
ModelAndView modelAndView = new ModelAndView("Index");
for(int i=0;i<hobby.length;i++)
{
System.out.println("hobby:"+hobby[i]);
}
return modelAndView;
}

4.时间传递
只需要在Controller中增加InitBinder然后页面传的时间格式需要与dateFormat 的一致。
@InitBinder
protected void init(HttpServletRequest request, ServletRequestDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}
<form id="form1" name="myform" method="post" action="../../login.do" >
用户:<input type="text" name="name"/>
密码:<input type="password" name="pwd"/>
出生日期:<input type="date" name="birthday"/>
<input type="submit"/>
</form>
这里设置出生日期的type=date,可以在页面选择时间。然后在Controller中获取
@RequestMapping(value="/login.do",method=RequestMethod.POST)
public ModelAndView login2(HttpServletRequest request,HttpServletResponse response,String name, String pwd,Date birthday){
ModelAndView modelAndView = new ModelAndView("Index");
System.out.println("name:"+name+" pwd:"+pwd+" birthday:"+birthday);
return modelAndView;
}

三、小结
今天主要介绍了往Controller传参数的几种方法,在以后的博客中会介绍Controller向view传递数据等内容。
SpringMVC之数据传递一的更多相关文章
- SpringMVC前后台数据传递中Json格式的相互转换(前台显示格式、Json-lib日期处理)及Spring中的WebDataBinder浅析
两个方向: 一.前台至后台: Spring可以自动封装Bean,也就是说可以前台通过SpringMVC传递过来的属性值会自动对应到对象中的属性并封装成javaBean,但是只能是基本数据类型(int, ...
- springMVC之数据传递
在前面介绍过从controller中向页面中传数据,可以通过HttpServletRequest进行setAttribute可以将数据放入request中.并且可以在jsp页面使用el表达式获取数据. ...
- SpringMVC之数据传递二
上一篇学习了从url或view中传数据到Controller中,今天学习下数据从Controller传到view中,主要有4种. 一.ModelAndView 处理方法返回值类型为 ModelAndV ...
- SpringMvc date数据传递处理
1.form表单提交date数据 form表单提交的date数据要在接收的字段上加入@DateTimeFormat注解 @DateTimeFormat(pattern = "yyyy-MM- ...
- 《Java从入门到放弃》入门篇:springMVC数据传递
springMVC中的数据传递方式与JSP和Struts2相比,更加的简单.具体有什么样的区别呢?我们通过下面这张图来对比就知道了. 随手画的,有些错别字,不用太在意..... 接下来,进入正题,sp ...
- springMVC:将controller中数据传递到jsp页面
1> 将方法的返回值该为ModelAndView在返回时,将数据存储在ModelAndView对象中如: newModelAndView("/WEBINF/jsp/showData.j ...
- SpringMVC -- 梗概--源码--壹--数据传递
附:实体类 Class : User package com.c61.entity; import java.text.SimpleDateFormat; import java.util.Date; ...
- 【Java框架型项目从入门到装逼】第十一节 用户新增之把数据传递到后台
让我们继续来做"主线任务",这一节,我们来做具体的用户新增功能.首先,为了简单起见,我把主页面改了一些,改的是列表那一块.删去了一些字段,和数据库表对应一致: 现在,我们要实现一个 ...
- springMVC通过ajax传递参数list对象或传递数组对象到后台
springMVC通过ajax传递参数list对象或传递数组对象到后台 环境: 前台传递参数到后台 前台使用ajax 后台使用springMVC 传递的参数是N多个对象 JSON对象和JSON字符串 ...
随机推荐
- mysql大小写敏感问题
问题: 在创建mysql表的时候发现不论表明是大写或小写,建完之后统一被变成了小写. 原因: MySQL在windows下是不区分大小写的,将script文件导入MySQL后表名也会自动转化为小写. ...
- 面向对象和面向过程,python中的类class,python中程序的入口——main方法,
1.程序入口,让main显现出来: print(__name__)#__name___是模块中的隐藏字段,当前模块运行的函数名 if __name__ == __main__ __main__() # ...
- 【翻译】《向“弹跳球”演示程序添加新功能》 in MDN
文章地址: https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/%E5%90%91%E2%80%9C%E5%BC%B9% ...
- asp.net core 发布centos 7 遇到的坑
只是简单记录 .net core 在linux 的安装部署步骤,大神可以忽略 虚拟机:VMware Workstation Pro Linux 版本:http://mirrors.aliyun.com ...
- Java项目转换成Web项目
阐述:有时候我们在Eclipse中导入一个web项目,发现导入到项目中后变成一个Java项目,这让人很蛋疼.本篇主要讲述怎样将这个本该为web项目的Java项目变身回去,以及一些在导入过程中遇到的一些 ...
- JS获取当前周
var now = new Date() var weekFirstDay = new Date(now- (now.getDay() - 1) * 86400000) var firstMonth ...
- 虚拟机安装CentOS6.3及常见问题总结
学Linux的同学大多数开始是使用的是Ubuntu或者red hat,red hat虽然安装不需要收费,但是服务是收费的,下面我就讲讲怎么用虚拟机安装CentOS6.3,其他Linux的安装可以参考这 ...
- install-scp
centos6 minilize system will not scp command install: yum -y install openssh-clients and another mac ...
- python爬微信公众号前10篇历史文章(2)-拼接URL&发送http请求
如何拼接想要的url http://weixin.sogou.com/weixin?type=1&page=1&ie=utf8&query=%E5%A4%A7%E7%BA%BD ...
- centos7下更改docker镜像和容器的默认路径
笔者近期在服务器上搭建docker环境,可由于笔者是普通用户,在安装的时候就跳了很多坑,现在记录一下. 一.docker权限问题 据官方解释,搭建docker环境必须使用root权限,或者sudo装, ...