文档章节

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

文文1
 文文1
发布于 2018/05/13 21:33
字数 1131
阅读 6328
收藏 23

获取前台参数:

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

账号:loginName  
密码:password  


这是前台登录视图:

 

 

相应的前台源码:

<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";  
}  


运行结果:

 

方法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";  
}  


运行结果:

 

方法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";  
} 

​


方法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):

© 著作权归作者所有

文文1
粉丝 26
博文 457
码字总数 144038
作品 0
长沙
程序员
私信 提问
spring java.lang.NoClassDefFoundError: org/aspectj

加入上面引用 就可以 了 下载地址: http://mvnrepository.com/artifact/org.aspectj/aspectjweaver/1.8.6#ivy 也可以 自己下载 引入。 spring 向前台,传值的方式有几种? spring modelMap ...

@ccny
2015/07/27
120
0
SpringMVC——redirect重定向跳转传值

spring MVC框架controller间跳转,需重定向。有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示。 首先先来介绍一下不带参数的重定向: 我在后台一个c...

引鸩怼孑
2015/04/10
5.9K
0
SpringMVC常见面试题总结【概念】

什么是Spring MVC?介绍你对SpringMVC的理解。 springmvc是一个基于java实现了mvc设计模式的轻量级web框架,通过把model,view,controller分离,将web层进行解耦,把复杂的web应用分成几部分...

薛小二
05/24
59
0
Spring3 MVC Hello World(3)使用JSON进行前后台数据交互

在 Spring3 中,响应、接受 JSON都十分方便。 向前台返回 JSON 格式的数据: 使用注解@ResponseBody可以将结果(一个包含字符串和JavaBean的Map),转换成JSON。 Spring这个转换是靠org.cod...

木木情深
2014/01/22
389
0
腾讯这套SpringMVC面试题你懂多少(面试题和答案)

1、什么是 SpringMvc? 答:SpringMvc 是 spring 的一个模块,基于 MVC 的一个框架,无需中间整合层来整 2、Spring MVC 的优点: 答:1)它是基于组件技术的.全部的应用对象,无论控制器和视图...

别打我会飞
04/29
69
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
23分钟前
4
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
54分钟前
7
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
10
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
14
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部