之前的博客中也说了,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. mysql大小写敏感问题

    问题: 在创建mysql表的时候发现不论表明是大写或小写,建完之后统一被变成了小写. 原因: MySQL在windows下是不区分大小写的,将script文件导入MySQL后表名也会自动转化为小写. ...

  2. 面向对象和面向过程,python中的类class,python中程序的入口——main方法,

    1.程序入口,让main显现出来: print(__name__)#__name___是模块中的隐藏字段,当前模块运行的函数名 if __name__ == __main__ __main__() # ...

  3. 【翻译】《向“弹跳球”演示程序添加新功能》 in MDN

    文章地址: https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/%E5%90%91%E2%80%9C%E5%BC%B9% ...

  4. asp.net core 发布centos 7 遇到的坑

    只是简单记录 .net core 在linux 的安装部署步骤,大神可以忽略 虚拟机:VMware Workstation Pro Linux 版本:http://mirrors.aliyun.com ...

  5. Java项目转换成Web项目

    阐述:有时候我们在Eclipse中导入一个web项目,发现导入到项目中后变成一个Java项目,这让人很蛋疼.本篇主要讲述怎样将这个本该为web项目的Java项目变身回去,以及一些在导入过程中遇到的一些 ...

  6. JS获取当前周

    var now = new Date() var weekFirstDay = new Date(now- (now.getDay() - 1) * 86400000) var firstMonth ...

  7. 虚拟机安装CentOS6.3及常见问题总结

    学Linux的同学大多数开始是使用的是Ubuntu或者red hat,red hat虽然安装不需要收费,但是服务是收费的,下面我就讲讲怎么用虚拟机安装CentOS6.3,其他Linux的安装可以参考这 ...

  8. install-scp

    centos6 minilize system will not scp command install: yum -y install openssh-clients and another mac ...

  9. python爬微信公众号前10篇历史文章(2)-拼接URL&发送http请求

    如何拼接想要的url http://weixin.sogou.com/weixin?type=1&page=1&ie=utf8&query=%E5%A4%A7%E7%BA%BD ...

  10. centos7下更改docker镜像和容器的默认路径

    笔者近期在服务器上搭建docker环境,可由于笔者是普通用户,在安装的时候就跳了很多坑,现在记录一下. 一.docker权限问题 据官方解释,搭建docker环境必须使用root权限,或者sudo装, ...