SpringMVC Redirect 重定向后参数的传递

JAVA开发 workingTime 1690℃ 0评论

应用场景举例:

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

以上这种情况在后台我们一般都分成2个controller,一个删除的controller和一个查询列表的controller,这时候我们就需要用到Redirect跳转,在删除成功后进行跳转进行列表查询。

参考如下代码:

/**
* 用户列表
*
* @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 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中马上移除对象,所以在刷新一下后这个值就会丢掉。

那么问题来了,在listUser方法中,我们怎么接收这个resultMsg呢?

这时候就要用到@ModelAttribute注解了

@RequestMapping(value = "list-user", method = RequestMethod.GET)
public String listUser(UserVo user, ModelMap modelMap,@ModelAttribute("resultMsg") String resultMsg) {
    Pager pager = userService.queryPageList(user);
    //将提示信息传到页面中进行显示
    modelMap.put("resultMsg", resultMsg);
    modelMap.put("pager", pager);
    return "admin/list-user";
}

转载请注明:R&M » SpringMVC Redirect 重定向后参数的传递

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

ICP号:京ICP备14044161号;联系我:rm@rmworking.com