SpringMVC后台获取前台参数和向前台传值的几种方式

Easter79
• 阅读 673

获取前台参数:

我们以用户登录为例,用户登录涉及两个参数:

账号:loginName  
密码:password  

这是前台登录视图:

SpringMVC后台获取前台参数和向前台传值的几种方式

相应的前台源码:

<form action="login">  
    帐号:<input type="text" name="loginName" > <br/>  
    密码:<input type="text" name="password" > <br/>  
    <input type="submit" value="登录">  
</form>  

------------------------------------------------------

 介绍SpringMVC最常用的3种取值方法

------------------------------------------------------

方法1:参数直接获取

ps: 函数参数名与请求参数名保持一致。

@RequestMapping("/login")  
public String login(String loginName,String password){  
    System.out.println("方法1:参数直接获取");  
    System.out.println("loginName:"+loginName);  
    System.out.println("password:"+password);         
    return "loginSuccess";  
}  

运行结果:

SpringMVC后台获取前台参数和向前台传值的几种方式

方法2:对象获取

ps:建立一个对象,属性名对应请求参数名保持一致,并生成相应的getter()和setter()方法。

建立对象User:

package com.springdemo.entities;  
  
public class User {  
    private String loginName;         
    private String password;   
  
    public String getLoginName() {  
        return loginName;  
    }  
  
    public void setLoginName(String loginName) {  
        this.loginName = loginName;  
    }  
      
    public String getPassword() {  
        return password;  
    }  
  
    public void setPassword(String password) {  
        this.password = password;  
    }  
}  

开始接收:

@RequestMapping("/login")  
public String login(User u){  
    System.out.println("方法2:对象获取");  
    System.out.println("loginName:"+u.getLoginName());  
    System.out.println("password:"+u.getPassword());          
    return "loginSuccess";  
}  

运行结果:

SpringMVC后台获取前台参数和向前台传值的几种方式

方法3:@RequestParam参数绑定获取

ps:方法1的变种,但该接收参数名可以随意,通过注解@RequestParam指明即可。

请求URL为:

http://localhost:8080/springmvc/hello/101?loginName=wangwu&password=123

对于上面这个url,controller里面可以这么写:

​
@RequestMapping("/login")  
public String login(@RequestParam("loginName") String name,@RequestParam("password") String pwd){  
    System.out.println("方法3:参数绑定获取");  
    System.out.println("loginName:"+name);  
    System.out.println("password:"+pwd);          
    return "loginSuccess";  
} 

​

SpringMVC后台获取前台参数和向前台传值的几种方式

方法4:@PathVariable获取请求路径中的参数

这个注解能够识别URL里面的一个模板,我们看下面的一个URL

http://localhost:8080/springmvc/hello/101?param1=10&param2=20

上面的一个url你可以这样写:

@RequestMapping("/hello/{id}")
    public String getDetails(@PathVariable(value="id") String id,
    @RequestParam(value="param1", required=true) String param1,
    @RequestParam(value="param2", required=false) String param2){
.......
}

向前台传值(除了使用ModelAndView方式外。还可以使用Map、Model和ModelMap的方式):

Java代码

1.使用Map、Model和ModelMap的方式

@RequestMapping("/test")
public String test(Map<String,Object> map,Model model,ModelMap modelMap,HttpServletRequest request){
    //1.放在map里  
    map.put("names", Arrays.asList("caoyc","zhh","cjx"));
    //2.放在model里 建议使用
    model.addAttribute("time", new Date());
    //3.放在request里  
    request.setAttribute("request", "requestValue");
    //4.放在modelMap中 
    modelMap.addAttribute("city", "ChengDu");
    modelMap.put("gender", "male");
    return "hello";
}

JSP写法:

time:${requestScope.time}
names:${requestScope.names }
city:${requestScope.city }
gender:${requestScope.gender }
request:${requestScope.request}

2.使用ModelAndView的方式:

@RequestMapping(value="/test2.do",method = RequestMethod.POST)  
public ModelAndView checknameIsExist2(@RequestParam("sid") String sid,Model model,HttpServletRequest request) {  
    ModelAndView mav = new ModelAndView();  
    mav.addObject("ModelAndView", "ModelAndViewValue");  
    //设置要跳转的页面,与返回值时String时返回success类似,以下跳转到/student/studentList.jsp  
    mav.setViewName("/student/studentList");  
    return mav;  
}  

说明:使用ModelAndView,可以直接使用AddObject来传递数据,并且数据㐓使用EL表达式在前台页面处理。使用setViewName("/student/studentList");来设置页面跳转路径。

借用一篇文章:

springMVC的@RequestParam注解和@PathVariable注解的区别

@RequestParam注解和@PathVariable注解的区别,从字面上可以看出前者是获取请求里边携带的参数;后者是获取请求路径里边的变量参数。

(例如:127.0.0.1/user/{userId}?userName=zhangshan,userId是路径上的变量,userName才是请求参数信息)

1.@RequestParam注解

@RequestParam有三个参数:

value:参数名;

required:是否必需,默认为true,表示请求参数中必须包含该参数,如果不包含抛出异常。

defaultValue:默认参数值,如果设置了该值自动将required设置为false,如果参数中没有包含该参数则使用默认值。

示例:@RequestParam(value = "userId", required = false, defaultValue = "1")

2.@PathVariable注解

当使用@RequestMapping URI占位符映射时,Url中可以通过一个或多个{xxxx}占位符映射,通过@PathVariable可以绑定占位符参数到方法参数中。

例如:@PathVariable("userId") Long userId,@PathVariable("userName") String userName

(注:Long类型可以根据需求自己改变String或int,spring会自动做转换)

@RequestMapping(“/user/{userId}/{userName}/query")

请求URL:http://localhost/user/8/张山/query

@PathVariable小误区:

在有些参考资料中说,如果定义的参数名和占位符中的名称是相同的,则可以将 @PathVariable(xxxx) 简写为:@PathVariable,这其实是错误的!

因为在正常编译时,Java类反射对象是不包含方法的入参名称的,如果编译时将debug打开(javac –debug=no),方法的入参名称会记录到类中。

在Eclipse中可以这样设置(项目属性Java Compiler):

SpringMVC后台获取前台参数和向前台传值的几种方式

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
thinkcmf+jsapi 实现微信支付
首先从小程序端接收订单号、金额等参数,然后后台进行统一下单,把微信支付的订单号返回,在把订单号发送给前台,前台拉起支付,返回参数后更改支付状态。。。回调publicfunctionnotify(){$wechatDb::name('wechat')where('status',1)find();
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Stella981 Stella981
3年前
Angular路由参数传递
一、路由时传递参数的方式1、在查询参数中传递数据,如//前台页面<arouterLink"/product"queryParams"{id:1}"商品详情</a//后台页面获取参数exportclassProductComponentimplementsOnInit{
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k