【问题标题】:Using flash attributes when redirecting to a JSP page重定向到 JSP 页面时使用 flash 属性
【发布时间】:2016-06-24 09:15:13
【问题描述】:

我的 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 属性

【问题讨论】:

    标签: jsp spring-mvc


    【解决方案1】:

    如果你重定向,另一个控制器将被调用。

    你可以做的就是把闪现的Arguments作为一个普通的模型属性来传递:

    @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";
    

    不幸的是,属性名称中的点不允许您直接访问地图。您必须使用&lt;% code %&gt; 来完成此操作

    【讨论】:

      【解决方案2】:

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

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

      这是一种解决方法,因为我更喜欢让参数不可见 - 这是使用 flash 属性的主要原因。

      【讨论】:

      • 这对我来说是在 JSP 中获得价值的!谢谢!但是addAttributeaddFlashAttribute 有什么区别呢?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多