2011-09-30 96 views
1

我將我現有的問題改寫爲更通用的問題。我想知道Velocity是否有像JSP那樣的隱式對象引用。 我對知道請求對象特別感興趣。 在JSP我們可以得到在請求範圍的屬性等<%= request.getAttribute("req1") %>速度模板是否有隱含的請求對象?

我知道JSP是一個servlet和<%= request.getAttribute("req1") %>最終成爲_jspService()方法的一部分,其具有提供給它的請求對象的範圍之前請求結束。

我不知道怎樣的速度工作的幕後

爲了測試我做了如下的事情這是一個部分(也可以通過它播放它的作用在時間後離開請求對象)我以前的問題。

我有一個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放在模型映射中而不是請求中,但我想知道隱式請求對象ref。我也試過$req1,但它不工作。

當我對模型做同樣的事情並返回時,一切工作正常。

我哪裏錯了?

更新:同樣的事情也發生在req.getSession().setAttribute("req1", testObject)也。

+1

只要'$ req1'也不起作用? –

+0

您是否可以訪問您在速度模板中使用此方法設置的模型對象?這句話對我來說似乎是正確的......也許這裏還有其他一些問題? – smp7d

+0

是的,我可以正確訪問模型對象,@Dave我也嘗試過$ req1,它也不工作! – tintin

回答

2

達累斯薩拉姆,

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

AFAIK,你不能的VelocityViewServlet的模板訪問請求對象,除非你明確地設定在上下文的請求對象或使用v-tool

+0

我不知道Spring MVC中是否使用VelocityViewServlet。你能詳細解釋一下嗎? – tintin

+0

Spring不使用VelocityViewServlet,但應該有一個VelocityToolsView或類似於Spring的東西,可以用來支持VelocityTools。 –

0

看看這個問題:Velocity + Spring。春天的人還沒有保持與Velocity的整合。

一旦您創建了該擴展並將其設置爲在您的servlet配置中正確使用,您就可以簡單地將該對象放在ModelAndView上,並從那裏執行您需要的任何操作。

相關問題