Springmvc重定向参数以及表单提交问题的认识
来源:互联网 发布:越南 共产 知乎 编辑:程序博客网 时间:2024/05/22 01:59
在spring的一个controller中要把参数传到页面,只要配置视图解析器,把参数添加到Model中,在页面用el表达式就可以取到。但是,这样使用的是forward方式,浏览器的地址栏是不变的,如果这时候浏览器F5刷新,就会造成表单重复提交的情况。所以,我们可以使用重定向的方式,改变浏览器的地址栏,防止表单因为刷新重复提交。
jsp文件:
controller:
由于重定向相当于2次请求,所以无法把参数加在model中传过去。在上面例子中,页面获取不到msg参数。要想获取参数,可以手动拼url,把参数带在后面。
Spring 3.1 提供了一个很好用的类:RedirectAttributes。 使用这个类,我们可以把参数随着重定向传到页面,不需自己拼url了。
把上面方法参数中的Model换成RedirectAttributes,参数就自动跟在url后了。
但是,这样页面不能用el获取到,还要另外处理,所以,我们还有一种方式,不拼url,用el获取参数,就像普通转发一样。
还是使用RedirectAttributes,但是这次不用addAttribute方法,spring为我们准备了新方法,addFlashAttribute()。
这个方法原理是放到session中,session在跳到页面后马上移除对象。所以你刷新一下后这个值就会丢失。
这边我们使用@ModelAttribute注解,获取之前addFlashAttribute添加的数据,之后就可以正常使用啦。
补充一点:使用无论是使用RedirectAttribute,还是在后面拼接url,其本质上都是利用了二次的转发。
如果我们单单省略掉toHome后面的代码直接跳转到jsp页面,发现直接重定向是无法获取任何参数的。
这里作者作了一个中介的处理,从定向到toHome,然后再进行转发到home.jsp页面,因为model里面的数据都是放在request请求域里面的。
springMvc无论怎么封装其内部实现一定是通过request.getRequestDispatcher("/home.jsp").forward(request, response);
我之所以写下这么一段话是因为之前以为springmvc里面确实有实现重定向实现参数传递的方式。其本质还是通过转发实现的。
那为什么要多此一举呢,就是防止刷新的时候出现表单重复提交的问题。
转载自:http://blog.csdn.net/u011851478/article/details/51872977
- Springmvc重定向参数以及表单提交问题的认识
- Servlet中转发和重定向的路径问题以及表单提交路径问题
- Servlet中转发和重定向的路径问题以及表单提交路径问题
- Servlet中转发和重定向的路径问题以及表单提交路径问题
- Servlet中转发和重定向的路径问题以及表单提交路径问题
- Servlet中转发和重定向的路径问题以及表单提交路径问题
- Servlet中转发和重定向的路径问题以及表单提交路径问题
- Servlet中转发和重定向的路径问题以及表单提交路径问题
- Servlet中转发和重定向的路径问题以及表单提交路径问题
- DWZ 表单提交重定向问题
- DWZ 表单提交重定向问题
- DWZ 表单提交重定向问题
- 关于springmvc重定向如何携带参数的问题
- SpringMVC重定向以及静态资源问题
- HttpClient 实现重定向 以表单方式post提交参数
- SpringMVC重定向传参数的实现
- SpringMVC重定向传参数的实现
- DWZ (JUI) 教程 表单提交重定向问题
- Codeforces Round #311 (Div. 2) D. Vitaly and Cycle
- Ceph-智能分布CRUSH之Object与PG与OSD
- 使用 Android Studio 检测内存泄漏与解决内存泄漏问题
- 关于深度学习,看这一篇就够了
- 子进程中getppid()返回值与父进程的不一致
- Springmvc重定向参数以及表单提交问题的认识
- java包的定义
- PhpStorm 配置php7.0环境
- 二叉树的所有路径
- OOAD实验二
- ecshop遇到的用户频繁退出和导致跨域问题
- ser2net过滤特殊字符
- 392. Is Subsequence
- wait,notify,非阻塞队列实现生产者,消费者模型