SpringMVC Redirect 跳转后保存Model中的数据
来源:互联网 发布:淘宝上下架黄金时间 编辑:程序博客网 时间:2024/06/15 15:49
在做项目编码时,几乎都不可避免的要用到Redirect跳转并保存其中的参数。例如下面的需求:
在用户的列表页面删除一个用户,在删除后仍停留在列表页面,但是要显示删除成功或者相应的错误信息。
以上这种情况在后台我们一般都分成2个controller,一个删除的controller和一个查询列表的controller,这时候我们就需要用到Redirect跳转,在删除成功后进行跳转进行列表查询,(在struts2中是action到action的跳转)。
参考如下代码:
- /**
- * 用户列表
- *
- * @return
- */
- @RequestMapping(value = "list-user", method = RequestMethod.GET)
- public String listUser(UserVo user, ModelMap modelMap) {
- Pager pager = userService.queryPageList(user);
- modelMap.put("pager", pager);
- return "admin/list-user";
- }
- /**
- * 删除用户
- *
- * @param userId the user id
- * @param modelMap the model map
- * @return string
- */
- @RequestMapping(value = "delete-user", method = RequestMethod.POST)
- public String deleteUser(Long[] userId, ModelMap modelMap) {
- userService.deleteUser(userId);
- modelMap.put("resultMsg", "删除成功");
- return "redirect:list-user.shtml";
- }
我们发现,当删除成功后跳转到list-user这个controller时,“删除成功”这个消息丢失了。当然你可以在删除用户后再加入查询用户列表的代码而不进行controller之间的redirect跳转,但显然这不够优雅,有没有什么好的解决办法呢?
有需求肯定就会有解决办法,在这里我总结一下个人认为比较好用的、常用的方法,以及spring为我们封装的方法(推荐):
方式一:自己手动拼接url
- return "redirect:list-user.shtml?param1="+value1+"¶m2="+value2;
这个方式比较麻烦而且有个弊端,就是参数是中文的时候很难处理。
方式二:自己封装一个类
自己进行一些封装,包括中文的处理,转码解码等,好处是可以根据自己想要的自由实现,坏处是增加了工作量。在一些没有提供现成工具的框架中(例如strut2,个人所知貌似提供了action之间的传值,和url传值类似,中文就会杯具。如果有好的处理,欢迎拍砖。),适合用此方法。
代码:略。
方式三:使用spring mvc提供的现成工具类
这也是本人推荐的实现方式,当然前提是你用了spring mvc。
在spring mvc中,我们常用的是ModelMap,但是它还提供了一个RedirectAttributesModelMap类,该类实现了RedirectAttributes接口,提供一个闪存存储方案,使属性能够在重定向时依旧生存而不用嵌入到url,以下是官方文档的介绍:
A ModelMap implementation of RedirectAttributes that formats values as Strings using a DataBinder. Also provides a place to store flash attributes so they can survive a redirect without the need to be embedded in the redirect URL.
有了这个,我们处理起来就简单多了,参考如下代码:
- @RequestMapping(value = "delete-user", method = RequestMethod.POST)
- public String deleteUser(Long[] userId, RedirectAttributesModelMap modelMap) {
- userService.deleteUser(userId);
- modelMap.addFlashAttribute("resultMsg", "删除成功");
- return "redirect:list-user.shtml";
- }
发现进行redirect跳转后,“删除成功”的消息仍旧为我们保持着。
其实最底层仍旧是两种跳转,只不过spring又进行了封装而已,原理是把属性放到session中,在跳到页面后又在session中马上移除对象,所以在刷新一下后这个值就会丢掉。
- SpringMVC Redirect 跳转后保存Model中的数据
- SpringMVC Redirect 跳转后保存Model中的数据
- SpringMVC Redirect 跳转后保存Model中的数据
- SpringMVC Redirect 跳转后保存Model中的数据
- springMVC中的redirect和forward跳转
- Yii中的redirect跳转
- Yii中的redirect跳转
- SpringMVC 的redirect 和forward 跳转
- redirect springmvc中指定页面跳转方式
- Response.Redirect跳转后,框架内显示
- http切换https后redirect跳转过滤
- model redirect
- Servlet中的跳转(redirect和forward)
- backbone+springMVC 前端后台保存model数据的属性值为null问题
- SpringMVC中的HTTP跳转
- SpringMVC学习:redirect URL中的猫腻
- springmvc的foward和redirect跳转简单解析
- SpringMVC——redirect重定向跳转传值
- java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder
- HttpServletRequest和HttpServletResponse详解
- Python: PS 图像调整--明度调整
- OC项目中使用Swift
- node.js连接mysql数据库
- SpringMVC Redirect 跳转后保存Model中的数据
- Swift 使用WKWebview过程中遇到的问题汇总
- RelativeLayout 布局居中以及一些基本布局
- inline-block间隙问题内联元素与块级元素
- linux操作命令
- eclipse上创建maven项目并tomcat发布
- git的使用教程 简略版
- 高级程序员应该掌握哪些编程技术
- jackson出现错误 Unrecognized field,JsonIgnoreProperties忽略不起作用