我将我现有的问题改为更通用的问题。我想知道Velocity是否有像JSP那样的隐式对象引用。
我对了解请求对象特别感兴趣。
在JSP中,我们可以在请求范围中获取属性,如<%= request.getAttribute("req1") %>
我知道JSP是一个servlet,<%= request.getAttribute("req1") %>
最终作为_jspService()方法的一部分,在请求范围结束之前,它具有可用的请求对象。
我不确定Velocity如何在幕后工作(它可能会在它扮演角色时将请求对象留在后面)
为了测试我做了以下事情,这是我上一个问题的一部分。
我有一个Spring MVC TestController,我正在设置一个请求属性。我正在使用Velocity模板来渲染视图。
@RequestMapping(value="/test", method=RequestMethod.GET)
public ModelAndView display(HttpServletRequest req, HttpServletResponse resp){
...
req.setAttribute("req1", "This should be present for first request");
...
}
在Velocity模板中,我正在做类似
的事情Request: $request.getAttribute('req1')
但我没有得到req1的值。我知道我应该将req1放在模型映射中而不是请求中,但我想知道隐式请求对象引用。
我也试过了$req1
,但它没有用。
当我对模型做同样的事情并将其返回时,一切正常。
我哪里错了?
更新:同样的事情也发生在req.getSession().setAttribute("req1", testObject)
上。
答案 0 :(得分:2)
达累斯萨拉姆,
req.getSession().getAttribute("req1", testObject) == $req1
AFAIK,您无法访问VelocityViewServlet模板中的请求对象,除非您明确在上下文中设置请求对象或使用v-tool。
答案 1 :(得分:0)
看看这个问题:Velocity + Spring。春天的人们还没有与Velocity保持最新的整合。
一旦你创建了这个扩展并将其设置为在servlet配置中正确使用,你就可以简单地将对象放在ModelAndView上,并从那里做任何你需要的。