之前的博客中也说了,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之数据传递一的更多相关文章

  1. SpringMVC前后台数据传递中Json格式的相互转换(前台显示格式、Json-lib日期处理)及Spring中的WebDataBinder浅析

    两个方向: 一.前台至后台: Spring可以自动封装Bean,也就是说可以前台通过SpringMVC传递过来的属性值会自动对应到对象中的属性并封装成javaBean,但是只能是基本数据类型(int, ...

  2. springMVC之数据传递

    在前面介绍过从controller中向页面中传数据,可以通过HttpServletRequest进行setAttribute可以将数据放入request中.并且可以在jsp页面使用el表达式获取数据. ...

  3. SpringMVC之数据传递二

    上一篇学习了从url或view中传数据到Controller中,今天学习下数据从Controller传到view中,主要有4种. 一.ModelAndView 处理方法返回值类型为 ModelAndV ...

  4. SpringMvc date数据传递处理

    1.form表单提交date数据 form表单提交的date数据要在接收的字段上加入@DateTimeFormat注解 @DateTimeFormat(pattern = "yyyy-MM- ...

  5. 《Java从入门到放弃》入门篇:springMVC数据传递

    springMVC中的数据传递方式与JSP和Struts2相比,更加的简单.具体有什么样的区别呢?我们通过下面这张图来对比就知道了. 随手画的,有些错别字,不用太在意..... 接下来,进入正题,sp ...

  6. springMVC:将controller中数据传递到jsp页面

    1> 将方法的返回值该为ModelAndView在返回时,将数据存储在ModelAndView对象中如: newModelAndView("/WEBINF/jsp/showData.j ...

  7. SpringMVC -- 梗概--源码--壹--数据传递

    附:实体类 Class : User package com.c61.entity; import java.text.SimpleDateFormat; import java.util.Date; ...

  8. 【Java框架型项目从入门到装逼】第十一节 用户新增之把数据传递到后台

    让我们继续来做"主线任务",这一节,我们来做具体的用户新增功能.首先,为了简单起见,我把主页面改了一些,改的是列表那一块.删去了一些字段,和数据库表对应一致: 现在,我们要实现一个 ...

  9. springMVC通过ajax传递参数list对象或传递数组对象到后台

    springMVC通过ajax传递参数list对象或传递数组对象到后台 环境: 前台传递参数到后台 前台使用ajax 后台使用springMVC 传递的参数是N多个对象 JSON对象和JSON字符串 ...

随机推荐

  1. Android Services (后台服务)

    一.简介 服务是可以在后台执行长时间运行的应用程序组件,它不提供用户界面. 另一个应用程序组件可以启动一个服务,并且即使用户切换到另一个应用程序,它仍然在后台运行. 另外,组件可以绑定到一个服务来与它 ...

  2. Java仪器数据文件解析-PDF文件

    一.概述 使用pdfbox可生成Pdf文件,同样可以解析PDF文本内容. pdfbox链接:https://pdfbox.apache.org/ 二.PDF文本内容解析 File file = new ...

  3. 解析Visual C# 7.2中的private protected访问修饰符

    去年12月份,随着Visual Studio 2017 Update 15.5的发布,Visual C#迎来了它的最新版本:7.2. 在这个版本中,有个让人难以理解的新特性,就是private pro ...

  4. 新装的Linux服务系统安装MySQL

    目的描述:全新的腾讯云Linux服务器,系统是ubuntu 16.04.需要在上面安装mysql数据库. 使用XShell远程登录,在终端窗口中使用sudo apt-get 指令在线安装mysql. ...

  5. git记录(给老婆找的地址)

    ssh配置 https://blog.igevin.info/posts/generate-ssh-key-for-git/ git 查看某个文件的修改历史 1. git log -p filenam ...

  6. 集合详解(python)

    集合概念 集合是一个数学概念:由一个或多个确定的元素所构成的整体叫做集合. 集合中的元素三个特征: 确定性(元素必须可hash) 互异性(去重)--将一个列表变为集合,就自动去重了 无序性(集合中的元 ...

  7. protobuf(quickStart)

    1.简介 Protocol Buffers是Google开发一种数据描述语言,能够将数据进行序列化,可用于数据存储.通信协议等方面. 可以理解成更快.更简单.更小的JSON或者XML,区别在于Prot ...

  8. 最小生成数(并查集)Kruskal算法

    并查集:使用并查集可以把每个连通分量看作一个集合,该集合包含连通分量的所有点.这两两连通而具体的连通方式无关紧要,就好比集合中的元素没有先后顺序之分,只有属于和不属于的区别.#define N 100 ...

  9. zabbix自定义key监控mysql主从同步超简单!

    原理:利用在slave上运行show slave status获取Slave_IO_Running和Slave_SQL_Running的值 1.在zabbix客户端配置文件中加入: 首先要对mysql ...

  10. 面试:Handler 的工作原理是怎样的?

    面试场景 平时开发用到其他线程吗?都是如何处理的? 基本都用 RxJava 的线程调度切换,嗯对,就是那个 observeOn 和 subscribeOn 可以直接处理,比如网络操作,RxJava 提 ...