Spring MVC RedirectAttributes的用法
很久没发过技术贴了,今天对于一个问题纠结了2小时,遂放弃研究用另一种方法解决,奈何心中一直存在纠结,发帖求解

我先解释下什么是RedirectAttributes

RedirectAttributes是Spring mvc 3.1版本之后出来的一个功能,专门用于重定向之后还能带参数跳转的
他有两种带参的方式:
第一种: 
attr.addAttribute("param", value);  
这种方式就相当于重定向之后,在url后面拼接参数,这样在重定向之后的页面或者控制器再去获取url后面的参数就可以了,但这个方式因为是在url后面添加参数的方式,所以暴露了参数,有风险
例:


attr.addFlashAttribute("name", "123");
attr.addFlashAttribute("success", "success");
return "redirect:/index";

这样就相当于:return "redirect:/index?name=123&success=success"

第二种: 
attr.addFlashAttribute("param", value);
这种方式也能达到重新向带参,而且能隐藏参数,其原理就是放到session中,session在跳到页面后马上移除对象。所以你刷新一下后这个值就会丢掉
例:


attr.addFlashAttribute("status","999");
attr.addFlashAttribute("message","登录失败");
return "redirect:/toLogin";

这种方式确实能重定向带参,但是有个问题,这个只能重定向到页面上,也就是说重定向的这个页面视图,能用el表达式直接获取你带参的值,比如status 和message ,都能获取。 可是我重定向到另一个Controller的时候,这个控制器里面没法获取这两个参数

我现在有个需求:登录成功,直接重定向其他页面,登录失败,又得重定向到登录页面,直接return的还不行,但是又要带状态码和提示等参数,所以想到用RedirectAttributes的addFlashAttribute 方式。但是重定向到/toLogin这个控制器里面的时候,获取不到addFlashAttribute 当初添加的属性。

具体事例:

//通过直接获取getFlashAttributes的map,然后获取带参,但是获取不到Map<String, String> map=(Map<String, String>) attr.getFlashAttributes();System.out.println(map.get("status"));System.out.println(map.get("message"));

//addFlashAttribute 即将flashAttribute属性添加到request的OutputFlashMap中,以被重定向后的request获取//所以我通过获取OutputFlashMap的方式来取值,却发现maps不为空,但是里面的参数没有Map<String, Object> maps=RequestContextUtils.getOutputFlashMap(request);System.out.println(maps.get("status"));System.out.println(maps.get("message"));

//因为OutputFlashMap和InputFlashMap  都是由FlashMapManager来管理的//对于每一次请求一个 “input” flash map 会被创建,来存储来自任何之前请求的//flash attribute 还有一个 “output” flash map 会被创建,来存储任何我们存储在这个请求中的,之后的请求参数//这里我获取getInputFlashMap,看看能不能获取到参数,但是还是map2直接为nullMap<String, String> map2=(Map<String, String>)RequestContextUtils.getInputFlashMap(request);System.out.println(map2.get("status"));System.out.println(map2.get("message"));

查了很多资料,包括看了spring mvc的官方文档,对于这个重定向之后参数怎么获取都没有什么明确的解释
包括上述三种方式,包括我直接获取参数的方式都不行,于是放弃了RedirectAttributes来传参

最后还是用session来解决,重定向之前设置session,重定向之后拿值移除session。

效果是做完了,但是心里一直纠结这个,所以发帖,看看各位能不能用RedirectAttributes的addFlashAttribute 方式,并且在另一个控制器里面获取这个添加的参数值

看在我光写这个帖子就花了这么久的份上,希望能得到答案...

    @RequestMapping("flash")public String flash(RedirectAttributes redirectAttributes) {redirectAttributes.addFlashAttribute("username", "Biao");return "redirect:flash2";}

@RequestMapping("flash2")@ResponseBodypublic String flash2(@ModelAttribute("username") String username) {return "username: " + username;}

Spring MVC RedirectAttributes的用法解决办法相关推荐

  1. Spring MVC 使用问题与解决--HTTP Status 500 - Servlet.init() for servlet springmvc threw exception

    Spring MVC 使用问题与解决--HTTP Status 500 - Servlet.init() for servlet springmvc threw exception 参考文章: (1) ...

  2. Spring MVC的WebMvcConfigurerAdapter用法收集(零配置,无XML配置)

    原理先不了解,只记录常用方法 用法: @EnableWebMvc 开启MVC配置,相当于 <?xml version="1.0" encoding="UTF-8&q ...

  3. 基于注解的Spring MVC与JPA如何解决实体的延时加载问题

    本文出处:http://blog.csdn.net/chaijunkun/article/details/7673931,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在 ...

  4. Spring中RedirectAttributes的用法

    RedirectAttributes 是Spring mvc 3.1版本之后出来的一个功能,专门用于重定向之后还能带参数跳转的的工具类.他有两种带参的方式: 第一种: redirectAttribut ...

  5. spring 定时任务执行两次解决办法

    在web.xml中同时配置了ContextLoaderListener和DispatcherServlet?假如真是这样的话,需要删掉一个配置,因为你相当于配置了两个spring容器,两个容器分别都执 ...

  6. 异常:This application has no explicit mapping for /error.以及spring.mvc.view.prefix配置解决

    <Spring Boot实战派> 实例7实现MVC模式的Web应用程序 遇到的问题 Error resolving template [mvcdemo], template might n ...

  7. spring mvc 返回html 乱码,解决springmvc使用ResponseBody注解返回json中文乱码问题

    spring版本:4.2.5.RELEASE 查看"org.springframework.http.converter.StringHttpMessageConverter"源码 ...

  8. Spring中循环依赖的解决办法

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 1.什么是循环依赖? 循环依赖就是循环引用,就是两个或多个bean相互之间的持有对方. A类中有一个B类型的成员变量, ...

  9. java解决框架注入,SSH框架 使用Spring时 IOC无法注入解决办法

    SSH框架 使用Spring时 IOC无法注入 本人初学JavaWeb 现在在自己做一个SSH的练习 今天遇到一个 Spring无法注入的问题, 用了一个下午的时间也没找到毛病具体发生在哪儿 求经验丰 ...

最新文章

  1. ST17H26之编译链接选项
  2. Android 5.0中的FDE功能实现
  3. Eclipse从SVN恢复本地误删除已删除的文件和代码
  4. TCP服务器端和客户端建立连接 - 服务器端的回调处理
  5. Mike and distribution(思维)
  6. orcad自上而下_开发自上而下的Web服务项目
  7. python保存的图片不完整
  8. 数据库工作笔记008---pg_hba.conf entry for host “192.168.2.111”, user “gpadmin”, database “template1”, SSL
  9. 设计模式笔录(一),什么是设计模式
  10. 将adb命令打包成脚本
  11. CMMI3—CMMI5认证的详细流程
  12. 悟空CRM测试用例执行,项目评审
  13. 行业认证标准:MISRA编码标准(MISRA C:2012和MISRA C++:2008)
  14. 计算机电路基础张志良,计算机电路基础 第2版
  15. 【VC++游戏开发#十】2D篇 —— 人工智能(一):滚动地图 用鼠标控制人物的走动
  16. 辗转相除法求最大公因数
  17. drop_last=True
  18. 线上配镜新方式:眼镜直通车竞品分析报告
  19. 如何包含鼠标指针(箭头)截图或者录屏?
  20. 中国历代王朝疆域面积一览表

热门文章

  1. C#中Cookies的读取
  2. IntentService详解
  3. 游戏编程入门之绘制动画的精灵(爆炸特效)
  4. 洛谷 P2046 BZOJ 2007 海拔(NOI2010)
  5. ajax异步通讯 遮罩滚动栏,防止并发及误操作
  6. influx生产部署重要配置
  7. Apache RocketMQ在linux上的常用命令
  8. Leetcode39.Combination Sum组合总和
  9. 异常记录与处理-Cannot find class [org.apache.commons.dbcp.BasicDataSource]
  10. js 常用的正则表达式