码迷,mamicode.com
首页 > 编程语言 > 详细

SpringMVC Redirect 跳转后保存Model中的数据

时间:2015-04-19 13:03:22      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

在用户的列表页面删除一个用户,在删除后仍停留在列表页面,但是要显示删除成功或者相应的错误信息。

以上这种情况在后台我们一般都分成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+"&param2="+value2;

这个方式比较麻烦而且有个弊端,就是参数是中文的时候很难处理。

方式二:自己封装一个类

自己进行一些封装,包括中文的处理,转码解码等,好处是可以根据自己想要的自由实现,坏处是增加了工作量。在一些没有提供现成工具的框架中(例如 strut2,个人所知貌似提供了action之间的传值,和url传值类似,中文就会杯具。如果有好的处理,欢迎拍砖。),适合用此方法。

方式三:使用spring mvc提供的现成工具类

      前提是你用了spring mvc。

      在spring mvc中,我们常用的是ModelMap,但是它还提供了一个RedirectAttributesModelMap类,该类实现了RedirectAttributes接口,提供一个闪存存储方案,使属性能够在重定向时依旧生存而不用嵌入到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中的数据

标签:

原文地址:http://www.cnblogs.com/nullexception/p/4438875.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!