@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重定向传参的更多相关文章

  1. spring mvc controller间跳转 重定向 传参(转)

    spring mvc controller间跳转 重定向 传参 url:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ ...

  2. SpringMVC归纳-1(model数据模型与重定向传参技术)

    要点: model是一个Map结构的数据模型,能重定向时传递数据(拼接URL),但不安全,主要用于渲染前端页面,配合Thymeleaf填充html里面里设置好的参数. @RequestParam用来获 ...

  3. jsp内部传参与重定向传参

    1 重定向地址栏会发生改变,因为它会发送两次请求,内部转发,地址栏不会发生改变,因为它只有一个请求2 重定向不能获取上一次请求中的参数,而内部转换可以3 内部转发可以访问WEB-INF下的资源,重定向 ...

  4. SpringMVC中使用RedirectAttributes重定向传参,防止暴露参数

    RedirectAttributes是SpringMVC3.1版本之后出来的一个功能,专门用于重定向之后还能带参数跳转的. 当我从jsp页面函数中带参数到controller层方法,方法执行完毕后返回 ...

  5. spring mvc controller间跳转 重定向 传参 (转)

    转自:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ 1. 需求背景     需求:spring MVC框架contr ...

  6. Spring Mvc Controller间跳转 重定向 传参 (转)

    原文链接:http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ 1. 需求背景     需求:spring MVC框架con ...

  7. Spring中RedirectAttributes对象重定向传参

    Spring3中的FlashAttribute 为 了防止用户刷新重复提交,save操作之后一般会redirect到另一个页面,同时带点操作成功的提示信息.因为是Redirect,Request里 的 ...

  8. spring mvc controller间跳转 重定向 传参

    http://blog.csdn.net/jackpk/article/details/19121777/

  9. spring mvc 重定向传参

    参考链接如下: http://bbs.csdn.net/topics/391034118?page=1 自己的示例程序: 详细页面提交一个修改动作,修改完成后跳转到检索页面,把检索条件重新赋值给检索页 ...

随机推荐

  1. QtWebKit_cookie

    1.百度搜索“qtwebkit cookie” 2. 2.1.qtwebkit 里 cookie 信息的保存 http://blog.tianya.cn/post-227188-33378112-1. ...

  2. m_Orchestrate learning system---网站的语言选择功能(中文英文)

    m_Orchestrate learning system---网站的语言选择功能(中文英文) 一.总结 一句话总结:有两种方法,一是session+js端代码,而是session+php端代码. 推 ...

  3. Springfox与swagger的整合使用(十七)

    一.前言 让我们先理一下springfox与swagger的关系. swagger是一个流行的API开发框架,这个框架以“开放API声明”(OpenAPI Specification,OAS)为基础, ...

  4. CentOS7 Could not retrieve mirrorlist http://mirrorlist.centos.org/?...

    在执行命令 sudo yum clean expire-cache 清理完过期的缓存后,再执行yum install 或 update命令都失败了.原因是清理过期缓存结果不该被清理的也删掉了,可能是y ...

  5. 一个自动化测试工具 UI Recorder

    链接 教程 UI Recorder 是一款零成本UI自动化录制工具,类似于Selenium IDE. UI Recorder 要比Selenium IDE更加强大! UI Recorder 非常简单易 ...

  6. Django 之 用redis存储session

    方案I: 1. 安装 django-redis liuqian@ubuntu:~$ pip install django-redis dango-redis 官方文档:http://niwinz.gi ...

  7. HDU 1535

    http://acm.hdu.edu.cn/showproblem.php?pid=1535 水题 单向图,从1到P所有点,再从所有点回到1,问最小花费 先求一遍1的最短路,然后反向建图,再求一遍1的 ...

  8. ubuntu 通过ssh上传/下载服务器文件

    1.用ssh登录远程ubuntu主机 (主机ip为:1.2.3.4;用户名:username) ssh username@1.2.3.4 2.从远程ubuntu主机copy文件/文件夹到本地(scp) ...

  9. 6-20 No Less Than X in BST(20 分)

    You are supposed to output, in decreasing order, all the elements no less than X in a binary search ...

  10. swift3.0 创建经典界面的九宫图

    网络上很多例子都是早期的 Object-C的效果,现在用到Swift3.0开发,故把网络上的例子翻译过来,达到基本的效果.可是现在这个还不算很满意,再下次继续进行优化 override func vi ...