spring mvC语言 在重定向到JSP页面时使用flash属性



我有以下情况在我的MVC控制器

    for (String key : form.keySet())
        redirectAttrs.addFlashAttribute(key, form.getFirst(key));
    return "redirect:" + page;

page/secure/admin/pages/userPreferences.jsp,我有一个单独的username属性添加到flash属性

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

我尝试了${param.username}${username},但没有工作。我试图转储所有${param}和请求属性,但在JSP

中没有发现任何内容。

类似的问题:如何在Spring MVC 3.1重定向后读取flash属性?-区别在于他们想要从MVC控制器读取flash属性,而不是从JSP视图

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

你能做的就是把闪过的参数作为一个普通的模型属性:

@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 %>

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

  1. JSP页面将看到${param.username}并相应地执行
  2. 我在查询字符串中获得用户名(例如userPreferences.jsp?username=jdoe),这不是很令人兴奋,但实际上允许刷新页面

这是一个变通方法,因为我喜欢让参数不可见——这是使用flash属性的主要原因。

最新更新