重定向到JSP页面时使用flash属性
我的MVC控制器有以下情况重定向到JSP页面时使用flash属性,jsp,spring-mvc,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页面,我如何访问usernameflash属性。但
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中找不到任何内容
类似问题:-区别在于他们希望从MVC控制器而不是从JSP视图读取flash属性解决方法:如果我使用
redirectAttrs.addAttribute
而不是addFlashAttribute
,我会得到两种效果:
${param.username}
,并相应地执行操作userPreferences.jsp?username=jdoe
),这并不令人兴奋,但实际上允许刷新页面这是一种解决方法,因为我更喜欢让参数不可见,这是使用flash属性的主要原因。如果重定向,将调用另一个控制器 您可以做的是将闪现的参数作为普通模型属性进行传输:
@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";
}
不幸的是,属性名称中的点不允许您直接访问地图。您必须使用
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";