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+"&param2="+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)相关推荐

  1. Python中的Optional和带默认值的参数

    文章目录 带默认值的参数 Typing.Optional类 Optional[X]等价于Union[X, None] 带默认值的参数 在Python中的类或者函数中,若参数在声明时附带了它的默认值,则 ...

  2. 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )

    文章目录 I . 函数类型 II . 带参数名的参数列表 III . 可空函数类型 IV . 复杂函数类型解读 V . 函数类型别名 VI . 带 接收者类型 的函数类型 VII . 函数类型实例化 ...

  3. python中参数(带星号的参数)

    python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要 ...

  4. delve 调试带参数_带你学够浪:Go语言基础系列-环境配置和 Hello world

    前面几周陆陆续续写了一些后端技术的文章,包括数据库.微服务.内存管理等等,我比较倾向于成体系的学习,所以数据库和微服务还有后续系列文章补充. 最近工作上比较多的 Golang 编程,现在很多互联网公司 ...

  5. python 函数参数的传递(参数带星号的说明) 元组传递 字典传递

    python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要 ...

  6. Python带*参数和带**参数:可变参数

    一.理论解释: *参数与**参数是Python参数中的重点知识,他们都被称为可变参数(任意参数),我们经常会在代码中看到*args.**kwargs 作为函数定义时:收集未匹配参数组成tuple或di ...

  7. href 带参数 打开exe_关于C#控制台传递参数和接收参数

    前言: 写了这么久程序,今天才知道的一个基础知识点,就是程序入口 static void Main(string[] args) 里的args参数是什么意思 ?惭愧... 需求: 点击一个button ...

  8. 第5.2节 Python中带星号的函数参数实现参数收集

    函数的参数使用除了常规的位置参数和关键字参数外,还支持可变个数的函数参数,这种支持可变个数的参数方法称为参数收集,对应的参数称为收集参数. 一.参数收集的定义 Python的函数支持可变不定数量的参数 ...

  9. python传入参数加星号,python 函数参数的传递(参数带星号的说明) 元组传递 字典传递...

    *arg 代表的是arg元祖,**kwd代表的是kwd名称的字典. 那函数传参数或是使用参数的时候,什么时候带*号什么时候不带*号呢?我这点总是理解不上来,或者说有点混乱.参考下面几个小函数,来理解下 ...

  10. 安卓玩机搞机技巧综合资源-----修复基带 改串码 基带qcn 改相关参数 终结贴【二十】

    有需要了解这方面常识的友友梦可以先参阅我这几个帖子 请点击跳转 基带qcn的备份与写入相关 格机 nv报错 高通联机修改IMEI等参数的相关解析 关于高通QPST平台功能和选项的一些简单说明 基带qc ...

最新文章

  1. 怎样在ROS下实现基于YOLO的px4无人机目标检测?
  2. 实验mongodb使用gridfs存放一个大文件
  3. 微信小程序开发视频教程新鲜出炉
  4. docker-compose:使用docker-compose部署nginx+supervisor+uwsgi+flask程序(mongodb)
  5. 华为笔记本怎么激活windows_取代Windows?最美国产操作系统诞生,华为笔记本电脑已搭载...
  6. kali64位下载怎么是AMD_AMD平台虚拟机安装macOS Sierra方法
  7. 如何设计真正高性能高并发分布式系统(万字长文)
  8. STM32启动文件代码解析
  9. Apache2.4开启php
  10. php图片地址参数错误,图片上传时一直显示请求地址错误怎么办
  11. Pentium 4处理器架构/微架构/流水线 (7) - NetBurst前端详解 - 分支预测
  12. 在线公开课 | 前端工程师如何突破瓶颈更好地变现自己
  13. 创建WEBPARTS全过程
  14. C#hashtable使用说明 以及 Hashtable和HashMap的区别【总结性】
  15. 计算机ping命令6,Mac电脑ping命令区别和IPv6命令
  16. Unity3D 《拥挤城市》3D房子建筑透视效果实
  17. 几个我感觉不错的在线课程学习app
  18. 一篇文章扫盲手机SIM卡相关知识
  19. 终极孵化器:仿生婴儿的美丽新世界
  20. STM32F0 HAL库软件模拟串口发送数据

热门文章

  1. 系统集成项目管理工程师去哪里报名
  2. QQ分享无法回调的问题
  3. 出玩 天书奇谈游戏 10级的感受
  4. 如何用TextOut输出非字符串型变量
  5. 【6.24校内test】T3 棠梨煎雪
  6. 【转载】[转]gfortran在windows操作系统下的安装
  7. java证书过期怎么办_java – 此jar包含签名者证书将在六个月内过期的条目
  8. 影评《一次别离》:丈夫这种…
  9. 何以飘零去,何以少团栾,何以别离久,何以不得安?
  10. 进化计算机小游戏攻略,亘古幻想超详细攻略 新手全方位入门指南