Немного измененная версия Принятый ответ из этот вопрос решает эту проблему.
Вместо того, чтобы возвращать ViewContext, вам нужно вернуть ViewToolContext. Вам также нужно будет подготовить наборы инструментов и настроить их для сеанса / запроса в зависимости от обстоятельств:
Вам нужно будет инициализировать toolContext в зависимости от того, что вам нужно (посмотрите мой предоставленный ответ здесь о том, как это сделать с обновленными API, поскольку вам потребуется доступ к ToolboxFactory.
Модифицированному методу createVelocityContext теперь необходимо подготовить наборы инструментов перед созданием ViewToolContext следующим образом:
protected Context createVelocityContext(Map <String, Object> model,
HttpServletRequest request,
HttpServletRespsone response)
throws Exception {
initVelocityContext(); //Still keep toolContext static
//will need to also add this to
//the servletContext -- left as an exercise
prepareToolboxes(request, response);
Context context =
new ViewToolContext(getVelocityEngine(), request,
response, getServletContext());
//Set model attrs to context
....
return context;
}
private void prepareToolboxes(final HttpServletRequest request,
final HttpServletResponse response) {
String key = Toolbox.class.getName();
if (factory.hasTools(Scope.REQUEST && request.getAttribute(key) == null) {
Toolbox requestTools = factory.createToolbox(Scope.REQUEST);
request.setAttribute(key, requestTools);
}
if (factory.hasTools(Scope.SESSION) {
HttpSession session = request.getSession();
synchronized(factory) {
//Follow pattern from above
}
}
}