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 自己的示例程序: 详细页面提交一个修改动作,修改完成后跳转到检索页面,把检索条件重新赋值给检索页 ...
随机推荐
- 【Python】使用codecs模块进行文件操作及消除文件中的BOM
前言 此前遇到过UTF8格式的文件有无BOM的导致的问题,最近在做自动化测试,读写配置文件时又遇到类似的问题,和此前一样,又是折腾了挺久之后,通过工具比较才知道原因. 两次在一个问题上面栽更头,就在想 ...
- 前端引用公共html模块方案
最近临时一个负责公司官网的妹纸请假,于是临时接手了下官网的项目,官网都是静态页面,算是很简单的,但发现页面挺多,而每个页面总有部分是和其他页面一模一样的,比如页头.页尾等,这样就导致一个地方的修改要在 ...
- C# 字符串与字节数组相互转换
https://www.cnblogs.com/xiaoqingshe/p/5882601.html
- git 沙河游戏节点图, 自由沙盒模拟git, 各类交互git命令
git学习练习总资源链接: https://try.github.io/ (练习已通,有document) 本沙盒游戏教学:https://learngitbranching.js.org/?demo ...
- Javascript 面向对象编程(补充):封装
Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类). 那么,如果 ...
- ISE创建Microblaze软核(一)
在使用FPGA时,有时会用到它做为主控芯片.对于习惯于单片机及C语言开发的人,使用FPGA做主控芯片,首先还是想到它的嵌入式软核功能.如果能够基于Microblze软核进行C语言程序的开发,相对于使用 ...
- 【LeetCode 38_字符串_算术运算】Count and Say
string countAndSay(int n) { string res; ) return res; res = "; ) { int len = res.size(); int i, ...
- java回收finalize方法的作用(编程思想)
清理:终结处理和垃圾回收 java有垃圾回收期负责回收无用对象占据的内存资源.但也有这种情况:假定你的对象(并非使用new)获得了一块“特殊”的内存区域,由于垃圾回收期只知道释放那些由new分配的内存 ...
- Bitdefender Total Security 2014 Free 6 Months & 12 month License Key
German Only – Bitdefender Total Security 2014 Free 6 Months Serial License Keyhttp://www.bitdefender ...
- STL标准库-容器-set与multiset
技术在于交流.沟通,转载请注明出处并保持作品的完整性. set与multiset关联容器 结构如下 set是一种关联容器,key即value,value即key.它是自动排序,排序特点依据key se ...