SpringMVC——重定向(不带参数重定向、带参数重定向、FlashAttribute、RedirectAttribute)
SpringMVC Controller间跳转,需重定向。
分三种情况:(1)不带参数跳转(2)带参数拼接url形式跳转(3)带参数不拼接参数跳转,页面也能显示。
1、不带参数重定向
需求:在列表页面,执行新增操作,新增在后台完成之后要跳转到列表页面,不需要传递参数,列表页面默认查询所有项目。
(1)方式一:使用ModelAndView(这是Spring 2.0用到的方法)
return new ModelAndView("redirect:/toList");
这样可以重定向到toList这个方法。
(2)方式二:返回String
return "redirect:/toList";
2、带参数重定向
需求:在列表页面有查询条件,跳转后查询条件不能丢,这样就需要带参数。
(1)方式一:自己手动拼接url
new ModelAndView("redirect:/toList?param1="+value1+"¶m2="+value2);
这样有个弊端,就是传中文可能有乱码问题。
(2)方式二:用RedirectAttributes,调用addAttribute方法,url会自动拼接参数。
页面取值直接用el表达式能获得到,原理是放到session中,session在跳到页面后马上移除对象,所以刷新后这个值就会丢掉。
public String test(RedirectAttributes attributes){attributes.addAttribute("test","hello");return "redirect:/test/test2";}
这样在test2方法中就可以通过获得参数的方式获得这个参数,再传递到页面。此种方式也会有中文乱码的问题。
(3)方式三:用RedirectAttributes,调用addFlashAttribute方法,url会自动拼接参数(url会显示要传递的数据)。
public String red(RedirectAttributes attributes){attributes.addFlashAttribute("test","hello");return "redirect:/test/test2";}
@RequestMapping("/save")public String save(@ModelAttribute("form") Bean form,RedirectAttributes attr)throws Exception {String code = service.save(form);if(code.equals("000")){attr.addFlashAttribute("name", form.getName()); attr.addFlashAttribute("success", "添加成功!");return "redirect:/index";}else{attr.addAttribute("projectName", form.getProjectName()); attr.addAttribute("enviroment", form.getEnviroment()); attr.addFlashAttribute("msg", "添加出错!错误码为:"+rsp.getCode().getCode()+",错误为:"+rsp.getCode().getName());return "redirect:/maintenance/toAddConfigCenter";}}@RequestMapping("/index")public String save(@ModelAttribute("form") Bean form,RedirectAttributes attr)throws Exception {return "redirect:/main/list";}
用上边的方式进行数据传递,不会在url出现要传递的数据,实际上存储在flashmap中。
FlashAttribute和RedirectAttribute
FlashAttribute和RedirectAttribute:通过FlashMap存储一个请求的输出,当进入另一个请求时作为该请求的输入。
典型场景如重定向(POST-REDIRECT-GET模式):
1、POST时将下一次需要的数据放在FlashMap;
2、重定向;
3、通过GET访问重定向的地址,此时FlashMap会把1放到FlashMap的数据取出来放到请求中,并从FlashMap中删除;
从而支持在两次请求之间保存数据并防止了重复表单提交。
FlashMapManager
SpringMVC提供FlashMapManager用于管理FlashMap,默认使用SessionFlashMapManager,即数据默认存储在session中。有两种方式把addFlashAttribute中的数据提取出来。
方法一:利用HttpServletRequest
public String test2(HttpServletRequest request){Map<String,?> map = RequestContextUtils.getInputFlashMap(request);System.out.println(map.get("test").toString());return "/test/hello";}
方法二:利用Spring提供的标签@ModelAttribute
public String test2(@ModelAttribute("test") String str){System.out.println(str);return "/test/hello";}
以上是在后台Controller层获取值的两种方法,如果在前台页面的话,直接利用EL表达式就可以取到数据。
SpringMVC——重定向(不带参数重定向、带参数重定向、FlashAttribute、RedirectAttribute)相关推荐
- Python中的Optional和带默认值的参数
文章目录 带默认值的参数 Typing.Optional类 Optional[X]等价于Union[X, None] 带默认值的参数 在Python中的类或者函数中,若参数在声明时附带了它的默认值,则 ...
- 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )
文章目录 I . 函数类型 II . 带参数名的参数列表 III . 可空函数类型 IV . 复杂函数类型解读 V . 函数类型别名 VI . 带 接收者类型 的函数类型 VII . 函数类型实例化 ...
- python中参数(带星号的参数)
python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要 ...
- delve 调试带参数_带你学够浪:Go语言基础系列-环境配置和 Hello world
前面几周陆陆续续写了一些后端技术的文章,包括数据库.微服务.内存管理等等,我比较倾向于成体系的学习,所以数据库和微服务还有后续系列文章补充. 最近工作上比较多的 Golang 编程,现在很多互联网公司 ...
- python 函数参数的传递(参数带星号的说明) 元组传递 字典传递
python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要 ...
- Python带*参数和带**参数:可变参数
一.理论解释: *参数与**参数是Python参数中的重点知识,他们都被称为可变参数(任意参数),我们经常会在代码中看到*args.**kwargs 作为函数定义时:收集未匹配参数组成tuple或di ...
- href 带参数 打开exe_关于C#控制台传递参数和接收参数
前言: 写了这么久程序,今天才知道的一个基础知识点,就是程序入口 static void Main(string[] args) 里的args参数是什么意思 ?惭愧... 需求: 点击一个button ...
- 第5.2节 Python中带星号的函数参数实现参数收集
函数的参数使用除了常规的位置参数和关键字参数外,还支持可变个数的函数参数,这种支持可变个数的参数方法称为参数收集,对应的参数称为收集参数. 一.参数收集的定义 Python的函数支持可变不定数量的参数 ...
- python传入参数加星号,python 函数参数的传递(参数带星号的说明) 元组传递 字典传递...
*arg 代表的是arg元祖,**kwd代表的是kwd名称的字典. 那函数传参数或是使用参数的时候,什么时候带*号什么时候不带*号呢?我这点总是理解不上来,或者说有点混乱.参考下面几个小函数,来理解下 ...
- 安卓玩机搞机技巧综合资源-----修复基带 改串码 基带qcn 改相关参数 终结贴【二十】
有需要了解这方面常识的友友梦可以先参阅我这几个帖子 请点击跳转 基带qcn的备份与写入相关 格机 nv报错 高通联机修改IMEI等参数的相关解析 关于高通QPST平台功能和选项的一些简单说明 基带qc ...
最新文章
- 怎样在ROS下实现基于YOLO的px4无人机目标检测?
- 实验mongodb使用gridfs存放一个大文件
- 微信小程序开发视频教程新鲜出炉
- docker-compose:使用docker-compose部署nginx+supervisor+uwsgi+flask程序(mongodb)
- 华为笔记本怎么激活windows_取代Windows?最美国产操作系统诞生,华为笔记本电脑已搭载...
- kali64位下载怎么是AMD_AMD平台虚拟机安装macOS Sierra方法
- 如何设计真正高性能高并发分布式系统(万字长文)
- STM32启动文件代码解析
- Apache2.4开启php
- php图片地址参数错误,图片上传时一直显示请求地址错误怎么办
- Pentium 4处理器架构/微架构/流水线 (7) - NetBurst前端详解 - 分支预测
- 在线公开课 | 前端工程师如何突破瓶颈更好地变现自己
- 创建WEBPARTS全过程
- C#hashtable使用说明 以及 Hashtable和HashMap的区别【总结性】
- 计算机ping命令6,Mac电脑ping命令区别和IPv6命令
- Unity3D 《拥挤城市》3D房子建筑透视效果实
- 几个我感觉不错的在线课程学习app
- 一篇文章扫盲手机SIM卡相关知识
- 终极孵化器:仿生婴儿的美丽新世界
- STM32F0 HAL库软件模拟串口发送数据