Spring MVC中有两种重定向方式:

  • 通过返回字符串,字符串必须以redirect:开头;
  • 通过返回ModelAndView;

重定向的时候如果需要给重定向目标方法传参数,要分字符串参数和pojo对象参数两种,先来总结一下通过返回字符串重定向的方式。

直接模拟一种场景:我在页面点击下一步按钮,会跳转到新的页面,中间通过重定向传递一些参数,如下图:

我的第一个页面:

点击右下角的下一页按钮之后,跳转到下面的页面:

将重定向传递过来的参数显示在第一个方块中指定的位置,这就是需要实现的功能,下面是编码过程。页面的代码省略,只贴重要部分。

1、给按钮绑定请求事件

// 点击下一页进行跳转
$("#nextPage").click(function() {
window.location.href = "../jump/ToNextPage";
});

2、创建控制器

第一步中的请求路径是../jump/ToNextPage,所以首先需要创建一个控制器,它的访问路径为/jump,然后创建一个方法,它的访问路径为并ToNextPage ,并在此方法中实现重定向功能。

@Controller
@RequestMapping("/jump")
public class JumpController { /**
* 通过返回字符串实现重定向 注意⚠️:通过Model传递字符串参数
*
* @param model
* @return
*/
@RequestMapping("ToNextPage")
public String jumpToNextPage(Model model) {
model.addAttribute("username", "Spring MVC");
model.addAttribute("msg", "Welcome to my house");
return "redirect:./nextPage";
} @RequestMapping("nextPage")
public ModelAndView nextPage(String username, String msg) {
ModelAndView mv = new ModelAndView();
mv.addObject("userName", username);
mv.addObject("msg", msg);
mv.setViewName("jump/jump");
return mv;
}
}

上面代码中红色加粗部分为重点:

  • Model model:使用Model数据模型传递字符串参数;
  • redirect:./nextPage:返回字符串,字符串以redirect:开头时,Spring MVC会将它视为重定向处理;
  • String username,String msg:重定向到的方法中接受参数时直接使用字符串接受,且参数名称就是在数据模型Model中定义的key;

在重定向之后的方法中,将获取到的参数渲染到了视图jump中,这样就能在视图中获取这两个参数了。

3、在重定向页面获取传递的参数

<div class="simple public">
<p style="text-align: center;">字符串重定向</p>
<p>Hello ${userName },${msg }</p>
</div>

上面代码中红色加粗的部分就是获取通过重定向传递过来的参数。

4、测试

上面传递的参数为

  • username:Spring MCV
  • msg:Welcome to my house

查看结果:

从上面的结果中可以看出:

  • 点击下一页之后URL变成了重定向的路径,并且带有参数;
  • 在之前要显示参数的位置获取到了传递过来的参数;

所以重定向成功。在上面的重定向过程中,传递的参数是个字符串,而且只能用Model数据模型传递,有时候需要传递一个pojo对象,但是HTTP的重定向参数是以字符串传递的,在Spring MVC中可以使用RedirectAttributes对象的addFlashAttribute传递pojo对象,它的原理是将数据保存在session中,重定向之后将其清除。

5、重定向传递POJO对象

还是上面的场景,只不过这次将重定向参数改为pojo对象,代码如下:

@Controller
@RequestMapping("/jump")
public class JumpController { @RequestMapping("ToNextPage1")
public String jumpToNextPage1(RedirectAttributes ra) {
Param param = new Param();
param.setParamName("Spring MVC");
param.setParamDesc("欢迎加入");
ra.addFlashAttribute("param", param);
return "redirect:./nextPage1";
} @RequestMapping("nextPage1")
public ModelAndView nextPage(Param param) {
ModelAndView mv = new ModelAndView();
mv.addObject("userName", param.getParamName());
mv.addObject("msg", param.getParamDesc());
mv.setViewName("jump/jump");
return mv;
}
}

上面代码中红色加粗的部分是重点:

  • RedirectAttributes ra:通过这个对象的addFlashAttribute方法传递pojo对象参数;
  • 在重定向后的方法中直接接受一个pojo对象即可;

看一下页面跳转情况

从结果可以看出,跳转之后URL为重定向之后的路径,虽然路径中不带有参数但是pojo参数传递成功了!

6、总结

上面的例子使用返回字符串的方式演示了Spring MVC中的重定向过程,以及重定向过程中传递参数的方法,需要注意以下几点:

  • 返回字符串重定向时,字符串中必须含有redirect,最好是以redirect开头;
  • 传递字符串参数使用Model数据模型;传递pojo参数使用RedirectAttributes类中的addFlashAttribute方法;
  • 不能同时使用两种方式传递参数;

最新文章

  1. react-native学习笔记--史上最详细Windows版本搭建安装React Native环境配置
  2. JQ 数字验证
  3. 纪念逝去的岁月——C/C++选择排序
  4. linux dns 连外网
  5. nginx服务器中的安全配置
  6. JSP显示-下拉框
  7. VS2015新功能
  8. .hpp文件
  9. Bootstrap 小技巧以及相关资源整理
  10. Linux应用层直接操作GPIO
  11. BZOJ 1690: [Usaco2007 Dec]奶牛的旅行
  12. myeclipse搭建svn插件
  13. angular4 JavaScript内存溢出问题 (FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory)
  14. easyui combobox setValue数据绑不上
  15. java利用自定义类型对树形数据类型进行排序
  16. json.dump和json.dumps区别,json.load和json.loads的区别
  17. POJ3259(Wormholes) 判断负环
  18. 运行tomcat报Exception in thread &quot;ContainerBackgroundProcessor[StandardEngine[Catalina]]&quot;
  19. LINQ 初步了解
  20. 大型运输行业实战_day11_2_事务理论与实际生产配置事务管理

热门文章

  1. 如何在Ubuntu 16.04上安装Nginx
  2. 2019-7-27-解决从旧格式的-csproj-迁移到新格式的-csproj-格式-AssemblyInfo-文件值重复问题...
  3. .net Core开源框架NetModular记录
  4. ubuntu切换到root用户
  5. PHP算法之回文数
  6. 新知道一个 端对端加密 Signal protocol
  7. leetcode-50-pow()
  8. Vim: 强大的g
  9. 共享商业&amp;技术红利,阿里云SaaS加速器让天下没有难做的SaaS
  10. kafka-node+socket.io 测试配置