我的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属性
答案 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
,我会得到两个效果:
${param.username}
并相应地采取行动userPreferences.jsp?username=jdoe
)这实际上并不令人兴奋,但实际上可以刷新页面这是一种解决方法,因为我更喜欢让参数不可见 - 这是使用flash属性的主要原因。