使用springmvc的controller的时候,碰到controller内方法的跳转的问题,记录下问题以及自己测试的过程。

场景:

业务执行更新操作之后返回列表页面,列表页面需默认展示查询的列表数据,涉及到两个controller的跳转。

问题

是使用forward还是redirect跳转

解决问题
其实使用forward或者redirect都能达到目的,但是有些问题在下面说明。
1、使用forward
a、例如:return "forward:/rest/queryData",实际的效果是在浏览器中的url地址还是原地址,存在重复提交的问题,所以forward就不推荐使用了。
b、如果是需要携带参数,直接拼接传递的参数,例如:return "forward:/rest/queryShopAlisName?phone=xxxxxxx"; 在跳转的controller中使用参数【@RequestParam("phone") String phone】获得传递的参数值,显然这样的方式也是不推荐的。

2、使用redirect
在controller方法的参数中使用RedirectAttributes来
a、不带参数:
直接使用 return "redirect:/rest/queryShopAlisName";浏览器的地址变成跳转的新地址,避免了重复提交的问题。
b、带参数的时候:


第一种选择:直接在url后面拼接参数,使用@RequestParam来取值,不推荐使用


第二种选择:在controller方法的参数中使用RedirectAttributes来传递参数

    @RequestMapping(value = "/checkMember")
public String checkMember(HttpServletRequest request, RedirectAttributes attr) {
Member member = null;
try {
String phone = request.getParameter("phone");
***attr.addAttribute("phone", "xxxx");***
member = cashierService.checkIsMember(phone);
} catch (Exception e) {
logger.error("query member is error happen : " + e);
}
return "redirect:/rest/queryShopAlisName";
}

使用attr.addAttribute来设置值,然后在跳转的controller中同样使用@RequestParam来取值,在浏览器中同样是拼接参数的形式,例如:http://localhost:8080/xxxx/xx...,同样不建议这么使用。


第三种选择:使用RedirectAttributes的addFlashAttribute的方法来设置值,原理是在跳转前将值放入session中,跳转之后就将值清除掉。浏览器的地址不显示参数的值,推荐使用这种方法来传值。

attr.addFlashAttribute("phone", "xxxxxxx");

在跳转的controller的参数中增加@ModelAttribute来取得参数值

@RequestMapping(value = "/queryShopAlisName")
public String queryShopAlisName(@ModelAttribute("phone")String phone) {
......
return "";
}

第一次写博客来记录,还请看官多多包涵咯。就这样结束吧

            </div>

springmvc中controller内方法跳转forward?redirect?的更多相关文章

  1. 详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]

    目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumen ...

  2. 详解SpringMVC中Controller的方法中参数的工作原理——基于maven

    转自:http://www.tuicool.com/articles/F7byQn 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:ht ...

  3. 【MVC - 参数原理】详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]

    前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/spring ...

  4. 详解SpringMVC中Controller的方法中参数的工作原理

    Spring MVC中Controller的处理方法的参数可以是Integer,String,自定义对象,ServletRequest,ServletResponse,ModelAndView等等,非 ...

  5. springMVC中controller层方法中使用private和public问题

    楼主一直习惯使用public,偶尔手误也可能使用private,但是发觉也没啥区别,都能调用service层,注入bean. 后来做一个新项目时,发觉自己以前的写的部分功能报错,当时有点懵逼,,找了半 ...

  6. SpringMVC中Controller的方法返回值

    1. 返回ModelAndView对象 controller方法中定义ModelAndView对象并返回,对象中可添加model数据.指定view. 实例 @RequestMapping(" ...

  7. SpringMVC中Controller

    详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析] 目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodR ...

  8. springMVC中controller的几种返回类型

    ==网文1,还不错,感觉比较老旧springMVC中controller的几种返回类型 - CSDN博客http://blog.csdn.net/qq_16071145/article/details ...

  9. springmvc 中controller与jsp传值

    参考:springmvc 中controller与jsp传值 springMVC:将controller中数据传递到jsp页面 jsp中,死活拿不到controller中的变量. 花了半天,网上列出各 ...

随机推荐

  1. C++ 复制到粘贴板

    网上好多教程讲如何复制到剪切板,但是有可能复制的是乱码,为了方便,将CString类型的复制到剪切板 CString source;if (OpenClipboard()){//防止非ASCII语言复 ...

  2. oracle学习之路(二)------数组类型/记录类型的使用

    Oracle记录类型介绍 RECORD:用户自己定义数据类型,由单行多列的标量构成的复合数据类型.它将一个或多个标量封装成一个对象进行操作记录不能够总体拿来比較也不能够总体推断为空.能够总体拿来赋值. ...

  3. nuxt配置sass

    没有比这更简单的了 只需要安装 node-sass sass-loader 就可以了 npm i node-sass sass-loader -D 然后就可以直接使用了: <style lang ...

  4. jQuery快速入门知识重点

    1.jquery中attr与prop的区别   attr:是通过setAttribute 和 getAttribute来设置的使用的是DOM属性节点   prop:是通过document.getEle ...

  5. 洛谷——P1601 A+B Problem(高精)

    https://www.luogu.org/problem/show?pid=1601#sub 题目背景 无 题目描述 高精度加法,x相当于a+b problem,[b][color=red]不用考虑 ...

  6. 新版本的AutoCAD2018 怎样删除 A360 Drive盘符

    通常的做法,如下: (1)点击开始菜单的“运行”(Win+R或者Win+X快捷选择运行),在弹出的对话框输入“regedit”,回车,进入注册表编辑器. (2)找到HKEY_LOCAL_MACHINE ...

  7. SQL_wm_concat函数实验:实现字段合并

    原创作品,出自 "深蓝的blog" 博客.欢迎转载.转载时请务必注明下面出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlo ...

  8. jquery验证篇

    jquery验证:验证不了(包括easy ui 插件引用的js) jquery easy ui 引用的js <span style="color:#000000;">& ...

  9. ES6的基础知识总结

    一. ES6 ES6中定义变量使用 let/const let 使用let定义的变量不能进行"变量提升" 同一个作用域中,let不能重复定义相同的变量名 使用var在全局作用域中定 ...

  10. POJ 3187 Backward Digit Sums 枚举水~

    POJ 3187  Backward Digit Sums http://poj.org/problem?id=3187 题目大意: 给你一个原始的数字序列: 3   1   2   4  他可以相邻 ...