spring MVC框架controller间跳转,需重定向。有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示。 
    首先先来介绍一下不带参数的重定向: 
    我在后台一个controller跳转到另一个controller,为什么有这种需求呢,是这样的。我有一个列表页面,然后我会进行新增操作,新增在后台完成之后我要跳转到列表页面,不需要传递参数,列表页面默认查询所有的。 
       方式一:使用ModelAndView(这是Spring 2.0的时候所用到的方法) 
        return new ModelAndView("redirect:/toList"); 
        这样可以重定向到toList这个方法 
        方式二:返回String 
        return "redirect:/ toList "; 
    然后在说一下带参数的重定向 
    第二种情况,列表页面有查询条件,跳转后我的查询条件不能丢掉,这样就需要带参数的了,带参数可以拼接url

方式一:自己手动拼接url 
        new ModelAndView("redirect:/toList?param1="+value1+"&param2="+value2); 
        这样有个弊端,就是传中文可能会有乱码问题。

方式二:用RedirectAttributes,这个是发现的一个比较好用的一个类 
        这里用它的addAttribute方法,这个实际上重定向过去以后你看url,是它自动给你拼了你的url。 
        使用方法: 
       public String test(RedirectAttributes attributes) 

attributes.addAttribute("test", "hello"); 
return "redirect:/test/test2"; 

        这样在toController这个方法中就可以通过获得参数的方式获得这个参数,再传递到页面。过去的url还是和方式一一样的。如果你细心的看重定向之后的url地址的话,你就会发现其实和上面的地址是一样的,这样也会出现上面那个方法出现的问题。 
    重点来了,咱们介绍一个不会出现中文乱码,而且不会在你的Url上出现你所要传递的数据的,这样就可以保证你在传递数据的安全 
        public String red(RedirectAttributes attributes) 

attributes.addFlashAttribute("test", "hello"); 
return "redirect:/test/test2"; 

   咱们用上面的方法进行数据传递你就会发现不会再Url上出现你要传递的数据,那么数据放到哪里去了,我们就来看看这是Spring 3.0新出现的特性,attributes.addFlashAttribute("test", "hello")实际存储的属性在flashmap,那么flashmap又是什么呢? 
    Flash 属性 和 RedirectAttribute:通过FlashMap存储一个请求的输出,当进入另一个请求时作为该请求的输入,典型场景如重定向(POST-REDIRECT-GET模式,1、POST时将下一次需要的数据放在FlashMap;2、重定向;3、通过GET访问重定向的地址,此时FlashMap会把1放到FlashMap的数据取出放到请求中,并从FlashMap中删除;从而支持在两次请求之间保存数据并防止了重复表单提交)。 
     Spring Web MVC提供FlashMapManager用于管理FlashMap,默认使用SessionFlashMapManager,即数据默认存储在session中 
    既然知道了怎么回事,那么我们就可以把它提取出来,怎么提取呢,很多人会说,既然存在session中,那就从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表达式就可以取到数据

转载自:https://zwdsmileface.iteye.com/blog/2200813

最新文章

  1. pandas处理数据
  2. build and set proxy in Ubuntu
  3. Web前段优化,提高加载速度 css
  4. php while循环 指定显示内容 例如不想显示前10条和后10条
  5. Sublime Text 2 介紹
  6. 指尖上的电商---(2)Solr全文搜索引擎的准备工作
  7. hdu 4117 GRE Words (ac自动机 线段树 dp)
  8. 13.怎样自学Struts2之Struts2本地化[视频]
  9. 腾讯QQAndroid API调用实例(QQ分享无需登录)
  10. Core Java 谈谈HashMap
  11. Node.js中Async详解:流程控制
  12. 重构手法之Introduce Explaining Variable(引用解释性变量)
  13. ASP.NET Core Web APi获取原始请求内容
  14. WPF简易北京地铁效果图
  15. scala的多种集合的使用(6)之映射Map的操作方法
  16. kodexplorer免费网盘安装教程
  17. 什么是基于风险的测试(RBT)?
  18. tornado学习篇(第二部)
  19. 在IDEA中将SpringBoot项目打包成jar包的方法
  20. 解除IIS配置节锁定

热门文章

  1. Oracle Spatial GIS相关研究
  2. new date()标准时间转yyyy-mm-dd hh:mm 24小时制
  3. Spring课程 Spring入门篇 6-3 ProxyFactoryBean及相关内容(下)
  4. is not mapped 错误改正
  5. css-css的基本选择器(三种)
  6. JavaScript的重载(通过argument.length)
  7. 使用JS完成首页轮播图效果
  8. package.json中版本理解
  9. iview中render函数监听事件
  10. &lt;Android 基础(十九)&gt; CoordinatorLayout