ModelAttribute注解使用与spring重定向传参
@ModelAttribute可以用于修饰controller里的方法和参数,将被修饰的对象的值绑定到指定名称的属性里。
当修饰方法时,方法返回的值会在该controller里每个访问处理前绑定一次。
修饰参数时,如果想重定向或者转发到另一个方法后,还能在另一个方法中取得model里的参数值,可以使用两种方法(假设方法A里跳到方法B,要取得方法A里的参数):
1.将方法A里的参数放在RedirectAttributes里,使用重定向进到B方法,在方法B里获取参数。
2.使用forward转发到B,使用HttpServletRequest.getAttribute()方法获取参数。
测试代码:
@Controller
@RequestMapping("/")
public class ModelTest {
@Value("wj")
private String userName; @ModelAttribute("sayHello")
public String runBeforeEachHandlerCalled() {
System.out.println("runBeforeEachHandlerCalled方法执行");
String sayHello = "Hello " + userName;
return sayHello;
} @RequestMapping(value = "/home",method = RequestMethod.GET)
public String toHomePage() {
return "index";
} @RequestMapping(value = "/handler1")
public String redirectMethod(@ModelAttribute("key2")String key2, RedirectAttributes attrbs) {
System.out.println("handler1里"); key2 = "key2value"; attrbs.addAttribute("redirectAttr1","redirectAttr1value");
attrbs.addFlashAttribute("redirectAttr2","redirectAttr2value"); // return "forward:/handler2";
// return new RedirectView("handler2");
return "redirect:handler2";
} @RequestMapping(value = "/handler2")
public String redirectDestination(ModelMap map, String redirectAttr1,
@ModelAttribute("redirectAttr2")String redirectAttr2,
HttpServletRequest request, RedirectAttributes attrbs) {
System.out.println("handler2里");
System.out.println("ModelMap.key2值为:" + map.get("key2"));
System.out.println("redirect.request.key2:" + request.getAttribute("key2"));
System.out.println("redirect.request.redirectAttr1:" + request.getAttribute("redirectAttr1"));
System.out.println("redirectAttr1值为:" + redirectAttr1);
System.out.println("redirectAttr2值为:" + redirectAttr2);
map.put("key3","key3value");
attrbs.addAttribute("key4","key4value");
return "forward:handler3";
} @RequestMapping(value = "/handler3")
public String forwardDestination(ModelMap map,@ModelAttribute("redirectAttr1") String redirectAttr1,
@ModelAttribute("redirectAttr2")String redirectAttr2,@ModelAttribute("key4")String key4,
HttpServletRequest request) {
System.out.println("handler3里");
System.out.println("ModelMap.key3值为:" + map.get("key3"));
System.out.println("forward.request.key3:" + request.getAttribute("key3"));
System.out.println("forward.request.redirectAttr1:" + request.getAttribute("redirectAttr1"));
System.out.println("redirectAttr1值为:" + redirectAttr1);
System.out.println("redirectAttr2值为:" + redirectAttr2);
System.out.println("key4值为:" + key4);
return "index";
} }
index.jsp:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<body>
<h2>${sayHello}</h2>
</body>
</html>
输出:
runBeforeEachHandlerCalled方法执行
handler1里
runBeforeEachHandlerCalled方法执行
handler2里
ModelMap.key2值为:null
redirect.request.key2:null
redirect.request.redirectAttr1:null
redirectAttr1值为:redirectAttr1value
redirectAttr2值为:redirectAttr2value
runBeforeEachHandlerCalled方法执行
handler3里
ModelMap.key3值为:null
forward.request.key3:key3value
forward.request.redirectAttr1:null
redirectAttr1值为:redirectAttr1value
redirectAttr2值为:redirectAttr2value
key4值为:
ModelAttribute注解使用与spring重定向传参的更多相关文章
- spring mvc controller间跳转 重定向 传参(转)
spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...
- SpringMVC归纳-1(model数据模型与重定向传参技术)
要点: model是一个Map结构的数据模型,能重定向时传递数据(拼接URL),但不安全,主要用于渲染前端页面,配合Thymeleaf填充html里面里设置好的参数. @RequestParam用来获 ...
- jsp内部传参与重定向传参
1 重定向地址栏会发生改变,因为它会发送两次请求,内部转发,地址栏不会发生改变,因为它只有一个请求2 重定向不能获取上一次请求中的参数,而内部转换可以3 内部转发可以访问WEB-INF下的资源,重定向 ...
- SpringMVC中使用RedirectAttributes重定向传参,防止暴露参数
RedirectAttributes是SpringMVC3.1版本之后出来的一个功能,专门用于重定向之后还能带参数跳转的. 当我从jsp页面函数中带参数到controller层方法,方法执行完毕后返回 ...
- spring mvc controller间跳转 重定向 传参 (转)
转自:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ 1. 需求背景 需求:spring MVC框架contr ...
- Spring Mvc Controller间跳转 重定向 传参 (转)
原文链接:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ 1. 需求背景 需求:spring MVC框架con ...
- Spring中RedirectAttributes对象重定向传参
Spring3中的FlashAttribute 为 了防止用户刷新重复提交,save操作之后一般会redirect到另一个页面,同时带点操作成功的提示信息.因为是Redirect,Request里 的 ...
- spring mvc controller间跳转 重定向 传参
http://blog.csdn.net/jackpk/article/details/19121777/
- spring mvc 重定向传参
参考链接如下: http://bbs.csdn.net/topics/391034118?page=1 自己的示例程序: 详细页面提交一个修改动作,修改完成后跳转到检索页面,把检索条件重新赋值给检索页 ...
随机推荐
- bin log、redo log、undo log和MVVC
logs innodb事务日志包括redo log和undo log.redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作. undo log不是redo log的逆向过 ...
- Codeforces 909C Python Indentation:树状数组优化dp
题目链接:http://codeforces.com/contest/909/problem/C 题意: Python是没有大括号来标明语句块的,而是用严格的缩进来体现. 现在有一种简化版的Pytho ...
- VS2010快捷键大全----养成良好的习惯
VS2010版快捷键Ctrl+E,D ----格式化全部代码 Ctrl+E,F ----格式化选中的代码 CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O ...
- a标记无效问题
当在<a href=''></a>这个标记中嵌入<td></td> 就会导致部分浏览器无法单击,所以在开发HTML页面的时候,一定不要在 a标记中嵌入 ...
- [转载]java中的标号:outer的作用
转载自:http://blog.sina.com.cn/s/blog_6f8bd746010136yr.html 标号label 标号提供了一种简单的break语句所不能实现的控制循环的方法,当在循环 ...
- Git 学习之 Git Basics
最近在用git,但git学习曲线实在是有点高. 好在找到一个文档 https://www.atlassian.com/git/tutorial/,以下就是学习笔记吧! git init git ini ...
- Oozie_01安装教程【20161116】
说明:hadoop用的是hadoop-2.5.0-cdh5.3.6 Oozie用的是oozie-4.0.0-cdh5.3.6 该测试环境用户名为hadoop 主机名为hadoop01 2.4安装部署 ...
- 20155322 2016-2017-2 《Java程序设计》第6周学习总结
20155322 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第六周学习的主要内容是课本的第十第十一章: 第十章介绍的是输入.输出,Java中的流分为两种 ...
- @Transactional、Spring的声明式事务
传送门 一.Spring的声明式事务 需要在xml文件中配置 <!--配置事务管理器类--> <bean id="transactionManager" clas ...
- ECUST 12级 Practise
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=26399#overview 果断开小号水过 CodeForces 58A #include ...