controller 之间的跳转
来源:互联网 发布:网络尺子 在线测量 编辑:程序博客网 时间:2024/05/16 07:23
在开发中,有时会遇到 controller 之间跳转的情况,而且有时在跳转的时候需要把不同的参数传递过去,比如从controller a
跳转到controller b
,再从controller b
到前端页面,并且把controller a
里的数据比如String
、List
、Map
或者对象传递到页面,等等类似情况。结合查找网上的资料以及自己的试验,现总结如下。
注: 本文实例均在springmvc
框架下,其他架构自行调整。
一、跳转方式
1. forward
使用返回 String 的方式: return "forward:Xxx.action";
@RequestMapping("/index")public String logout(ModelMap model, RedirectAttributes attr) { return "forward:test.action";}
如果使用ModelAndView
方式: return new ModelAndView("forward:/tolist");
注:此后,都以返回String的方式来叙述。
2. redirect
@RequestMapping("/index")public String logout(ModelMap model, RedirectAttributes attr) { return "redirect:test.action";}
3. forward 和 redirect 比较
forward
是请求转发,是服务器端行为,相当于一次请求,地址栏的 URL 不会改变。 redirect
是请求重定向,是客户端行为,相当于两次请求,地址栏的 URL 会改变。
二、跳转时数据的传递
1. 方式一:手动拼接 URL
return "redirect:/login.action?name="+ name;
login.action
:
@RequestMapping("/login") public String login(HttpServletRequest request, ModelMap model, RedirectAttributes attr ) { String name = request.getParameter("name"); model.addAttribute("name",name); return "login"; }
然后在login.html
接收,用${name}
即可。
拼接url传参的缺点:
- 参数包含中文字符的话,容易出现问题
- 不能
2. 方式二:RedirectAttributes
RedirectAttributes
是 Spring mvc 3.1 版本之后出来的一个功能,专门用于重定向之后还能带参数跳转的的工具类。
它有两种带参的方式:
第一种:redirectAttributes.addAttributie("prama",value);
redirectAttributes.addAttribute("prama1",value1);redirectAttributes.addAttribute("prama2",value2);return:"redirect:/path/list"
这种方法相当于在重定向链接地址追加传递的参数:return:"redirect:/path/list?prama1=value1&prama2=value2
(直接追加参数会将传递的参数暴露在链接的地址上,非常的不安全,慎用)
第二种:redirectAttributes.addFlashAttribute("prama",value);
redirectAttributes.addFlashAttribute("prama1",str);redirectAttributes.addFlashAttribute("prama2",list);redirectAttributes.addFlashAttribute("prama3",map);return:"redirect:/path/list.jsp" ;
此方法隐藏了参数,链接地址上不直接暴露,但是能且只能在重定向的页面上获取prama的值。其原理是参数放到了session
中,session
在跳转之后马上移除对象。如果重定向到一个controller
,是取不到该prama的值的。
总的来说,controller
之间跳转然后把参数传到前台页面,这种方式实现起来费力不讨好,对于数据传递以及前台页面的接收展示来说不是很友好,其实可以换成用ajax
方式来做,调用后台数据更加灵活并且局部刷新功能也更加友好。But,多一种方式,多一种选择。
- controller 之间的跳转
- 多个Controller之间的跳转
- springmvc中controller之间的跳转
- Controller与Controller之间跳转
- IOS7 oc controller之间跳转
- springmvc 服务器端的controller之间的跳转方式
- NSNotification解决view和controller之间的跳转耦合问题
- ZF 中用_forward在不同Controller之间Action跳转
- Zend Framework中Controller之间action跳转方式
- angularjs controller之间的通信
- angularjs Controller之间的通信
- Controller之间的通信方式
- angularjs Controller之间的通信
- controller跳转controller
- action 之间的跳转
- Activity 之间的跳转
- Servlet之间的跳转
- activity之间的跳转
- 第七届蓝桥杯大赛个人赛省赛(软件类)真题 C语言B组 1
- PrefixSpan算法原理总结
- IO流_文件过滤器改进输出指定目录下指定后缀名的文件名称案例、带文件名称过滤器的list()方法的源码
- python kivy windows 安装记录
- shared_ptr源码分析后续
- controller 之间的跳转
- 打印所有的Binary Number
- targan算法
- 数据挖掘随记
- 《深入理解java虚拟机》-虚拟机类加载机制
- LeetCode——5. Longest Palindromic Substring
- 设计模式—关系在代码中实现
- VS2013下socket新函数代替旧函数引起的编译错误
- Spring的《XML显式装配bean》之设置bean的作用域