前台传值到后台汉字值变了_SpringMVC后台获取前台参数和向前台传值的几种方式...

本文详细介绍了SpringMVC中获取前端传值的四种方法,包括参数直接获取、对象获取、@RequestParam参数绑定获取和@PathVariable获取路径参数。同时,还讲解了如何向前端传值,包括使用Map、Model、ModelMap以及ModelAndView的方式。
摘要由CSDN通过智能技术生成

获取前台参数:

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

账号:loginName

密码:password

这是前台登录视图:

26214000_E4H1.jpg

相应的前台源码:

帐号: 

密码: 

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

介绍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";

}

运行结果:

26214000_KUbG.jpg

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

}

运行结果:

26214000_XRt0.jpg

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

}

26214000_m5Wj.jpg

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

26214001_XbEH.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值