SpringMVC传值

实现步骤

  1. 先看后台代码如何获取前端传过来的数据,直接在方法的参数列表中添加@RequestParam(xxx),再在后面加上参数列表即可

在这里插入图片描述
不过这样的方式会出现一个问题:当前端页面没有提交相应的数据过来的时候,后台会出现异常,所以在实际的开发中,如果不添加这个注解,同样能正常获取前端传递的数据,即使没有传递数据,也不会报错,如果必须要添加该注解,可以设置 isRequired = false 避免空值报错的问题

  1. 后台如何把值传递给前端,可以在方法的参数列表中添加Model对象,通过Model对象把值传递给前端,Model 可以视为 Map 和 Attribute 的结合体
    在这里插入图片描述
    前端可以直接用nl标签${userName}获取

在这里插入图片描述

这个 Model 对象还有一个只有一个参数的方法,那么这个时候传递值的 key 是什么呢?

key 就是所传递值的 类型(key 的首字母小写),例如:这里的 userName 是 String 类型,这里实际效果就相当于:model.addAttribute(“string”, userName)
SpringMVC传值_第1张图片
在SpringMVC中,@RequestMapping(value=“user/add”) 中定义的value的值是前后台映射的重要标识。但是有可能 value 的值是动态的,那么又该如何处理呢?例如:在显示用户列表的界面,添加了显示每一个用户详情的功能
SpringMVC传值_第2张图片
此时传递的参数是每一个被点击的用户的 username 属性,那么后台就会将传递在路径中的值作为参数处理,@PathVariable 的功能就是用来获取 url 中的动态参数
SpringMVC传值_第3张图片
@RequestParam(xxx) 和 @PathVariable(xxx) 的异同

  1. 两种注解都是用于后台获取前端传递的值

  2. @RequestParam(“username”)主要用于 url 传值 http://localhost:8080/SpringMVC/user?username=Andy;而@PathVariable String username 主要用于REST风格的传值,而且是动态的值 http://localhost:8080/SpringMVC/user/Andy

  3. @RequestParam(“username”),前端传递的值不能为空,否则程序会出现异常;@RequestParam(“xxx”),在前端传递参数和后台形参不匹配(包括参数类型)的时候使用可以起到一个转换的作用;例如:在批量上传文件时,前端传递的 name 参数是字符串,而后台接收时定义的类型是数组

前端
在这里插入图片描述
后端
在这里插入图片描述
注意

  1. 在后台服务器跳转时,有时候可能会需要跳转的时候带参数到下一个链接;这种情况下可以使用 RedirectAttributes 来设值
    SpringMVC传值_第4张图片
    不过要注意的是,传递的参数类型是 String 格式的,传递的值会以字符串的方式连接在跳转连接的后方

SpringMVC传值_第5张图片
2. 如果要传递对象的话,可以采用如下方式

SpringMVC传值_第6张图片
这种传递方式不会在跳转链接后拼接字符串,而是将值暂时放在 session 中,跳转完毕后,再删除传递的值
SpringMVC传值_第7张图片
注意:动态参数传值包含多个小数点可能会出现数据丢失

在使用 @PathVariable(xxx) 标签取值的时候,如果参数有多个小数点(一个不会有问题),超过两个会出现数据丢失的情况;如下所示:

如果前端传递的参数是:user/[email protected] 那么在后台接收参数的时候会变成 [email protected] ;从而出现数据丢失(.com 不见了)

解决方案

(1) 把动态参数夹在中间,像这样:user/[email protected]/name (推荐)

(2) 修改 @GetMapping 注解为:@GetMapping(“/user/{username:.+}”)

你可能感兴趣的:(#,springMvc,前端,spring,javascript)