之前的博客中也说了,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. javascript 推箱子游戏介绍及问题

    最近没什么事情,我的一个亲戚在学校学习PHP,课程中老师让他们编写一个javascript版本的推箱子小游戏,他没什么头绪,就来问我,我当时很闲,就随口答应他包在我身上.结果真正写的时候还是花了点时间 ...

  2. URL中“#”

    2010年9月,twitter改版.一个显著变化,就是URL加入了"#!"符号.比如,改版前的用户主页网址为http://twitter.com/username改版后,就变成了h ...

  3. Handsontable的前端分页与数据库分页

    Handsontable虽然处理速度很快,但当数据量达到10W+的时候很容易导致浏览器内存泄漏,这时候可以用分页来解决.官网提供了前端分页demo,测试后发现也只能处理低于10W的数据,而且调试的时候 ...

  4. django Forbidden

    Forbidden (CSRF cookie not set.)解决方法 Forbidden (CSRF cookie not set.):xxx解决方法:在django项目的settings.py文 ...

  5. Lintcode212 Space Replacement solution 题解

    [题目描述] Write a method to replace all spaces in a string with%20. The string is given in a characters ...

  6. 每个java初学者都应该搞懂的问题

    对于这个系列里的问题,每个学JAVA的人都应该搞懂.当然,如果只是学JAVA玩玩就无所谓了.如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列.内容均来自于CSDN的经典老贴. ...

  7. 如何写出如散文般的代码――《代码整洁之道》读书笔记(Ch1-Ch3)

    不知道有多少人像我一样,程序出现问题时添加函数添加变量解决,变量名用a,b,c等"简单"的字母来表示.不知道有多少人像我一样,看完自己的代码,心里暗骂"什么玩意儿!&qu ...

  8. Samba原理和配置

    Samba原理和配置 个人原创,转载请注明,否则追究法律责任. 一,原理及安装 1,Samba是在Linux和UNIX系统上实现在局域网上共享文件一种通信协议,它为局域网内的不同计算机之间提供文件等资 ...

  9. generator生成器iterator遍历器和yield

    generator方法()返回一个iterator 使用generator时永远先去调用generator()方法 for of对iterator的调用过程(babel参照) 1,_iterator. ...

  10. [JLOI2012] 树

    Description 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深 ...