重定向到JSP页面时使用flash属性

时间:2016-06-24 09:15:13

标签: jsp spring-mvc

我的MVC控制器中存在以下情况

    for (String key : form.keySet())
        redirectAttrs.addFlashAttribute(key, form.getFirst(key));

    return "redirect:" + page;

page/secure/admin/pages/userPreferences.jsp,我在Flash属性中添加了一个username属性

从JSP页面,如何访问username个flash属性。但我不知道怎么做!

我已经尝试了${param.username}${username},但都没有效果。我试图转储所有${param}和请求属性,但在JSP

中没有发现任何内容

类似的问题:How to read flash attributes after redirection in Spring MVC 3.1? - 区别在于他们想要从MVC控制器而不是从JSP视图中读取flash属性

2 个答案:

答案 0 :(得分:2)

如果您重定向,则会调用另一个控制器。

您可以做的是将闪烁的参数作为普通模型属性传输:

@RequestMapping(method = RequestMethod.GET)
protected String get(HttpServletRequest request, Model model) { // redirect request

    Map<String, ?> inputFlashMap = RequestContextUtils.getInputFlashMap(request);
    if (inputFlashMap != null) {
        String name = (String) inputFlashMap.get("username");
        model.addAttribute("username", name);
    }

    return "page";
}

另一个选项是访问jsp中的flash地图。看看这个实现:

public static Map<String, ?> getInputFlashMap(HttpServletRequest request) {
    return (Map<String, ?>) request.getAttribute(DispatcherServlet.INPUT_FLASH_MAP_ATTRIBUTE);
}

使用:

public static final String INPUT_FLASH_MAP_ATTRIBUTE = DispatcherServlet.class.getName() + ".INPUT_FLASH_MAP";

遗憾的是,属性名称中的点不允许您直接访问地图。您必须使用<% code %>

来完成此操作

答案 1 :(得分:1)

解决方法:如果我使用redirectAttrs.addAttribute代替addFlashAttribute,我会得到两个效果:

  1. JSP页面将显示${param.username}并相应地采取行动
  2. 我在查询字符串中获得了该用户名(例如userPreferences.jsp?username=jdoe)这实际上并不令人兴奋,但实际上可以刷新页面
  3. 这是一种解决方法,因为我更喜欢让参数不可见 - 这是使用flash属性的主要原因。