Velocity模板是否具有隐式请求对象?

时间:2011-09-30 13:44:46

标签: spring-mvc velocity

我将我现有的问题改为更通用的问题。我想知道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)上。

2 个答案:

答案 0 :(得分:2)

达累斯萨拉姆,

req.getSession().getAttribute("req1", testObject)  ==  $req1

AFAIK,您无法访问VelocityViewServlet模板中的请求对象,除非您明确在上下文中设置请求对象或使用v-tool

答案 1 :(得分:0)

看看这个问题:Velocity + Spring。春天的人们还没有与Velocity保持最新的整合。

一旦你创建了这个扩展并将其设置为在servlet配置中正确使用,你就可以简单地将对象放在ModelAndView上,并从那里做任何你需要的。