Есть ли в шаблоне Velocity неявный объект запроса? - PullRequest
1 голос
/ 30 сентября 2011

Я перефразирую свой существующий вопрос в более общий. Я хочу знать, есть ли у Velocity неявные ссылки на объекты, как у JSP. Мне особенно интересно знать об объекте запроса. В JSP мы можем получить атрибут в области запроса, например <%= request.getAttribute("req1") %>

Я знаю, что JSP - это сервлет, и <%= 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 в карте модели вместо запроса, но я хочу знать о неявном объекте запроса ref.

Я тоже пытался $req1, но он не работает.

Когда я делаю то же самое с моделью и возвращаю ее обратно, все работает правильно.

Куда я иду не так?

Обновление: То же самое происходит и с req.getSession().setAttribute("req1", testObject).

Ответы [ 2 ]

2 голосов
/ 04 октября 2011

Сала,

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

AFAIK, вы не можете получить доступ к объекту запроса в шаблонах VelocityViewServlet, если только вы не установили объект запроса в контексте или не используете v-tool .

0 голосов
/ 06 октября 2011

Взгляните на этот вопрос: Скорость + Пружина . Сотрудники Spring не обновляют интеграцию с Velocity.

Как только вы создали это расширение и настроили его для правильного использования в конфигурации сервлета, вы сможете просто поместить объект в ModelAndView и оттуда делать с ним все, что вам нужно.

...