java JSTL对象在url中,而不是在标记上下文中
因此,我正在编写一个带有JSP视图和JSTL标记的Spring3WebApp。它们通常工作得很好,但有一个控制器调用无法正确抓取标签
ModelAndView mav = new ModelAndView(
new RedirectView(RequestUtil.getWebAppRoot(request) + clientShortName, false)
);
mav.addObject("status","Session for interface successfully removed");
return mav;
所以,当我在我的视图中引用它时,我会有一行如下所示:
<p>status="${status}"</p>
它只显示为:
status=""
现在我通常会认为这是导致我的视图呈现不正确的原因,但实际上我发现我的URL中附加了以下内容:
?status=Session+for+interface+zFXDEV3+successfully+removed
这给我留下了两个问题:
- 为什么我不能从JSTL标记引用对象李>
- 如果我不能把它作为标记上下文的一部分,它在URL中做什么李>
对于任何想知道的人来说,课程类型是:
org.springframework.web.servlet.view.RedirectView.RedirectView
org.springframework.web.servlet.ModelAndView.ModelAndView(View view)
# 1 楼答案
因为它是
RedirectView
。javadoc说:因此
String
对象将作为查询参数添加到新的重定向请求中。它们不再作为新请求的模型/请求属性提供处理重定向URL的
@Controller
应该将该属性重新添加到模型中# 2 楼答案
这不是JSTL,而是Expression Language(通常称为EL)。问题是EL
${status}
将在请求属性中查找变量,但当重定向到JSP时,状态为请求参数,而不是请求属性(请注意,重定向到页面时这是正常行为)下面是一个更好的示例(取自StackOverflow表达式语言代码):
这里有两种可能的选择:
正如@SotiriosDelimanolis所述,这个URL的
@Controller
类应该接受请求参数,并将它们添加为请求属性。如果将来可以添加更多请求参数,将需要大量工作使用EL中的
${param}
对象,该对象允许您访问请求参数。使用此选项,您应该将${status}
更改为${param.status}
。故事结束了