需要在VelocityViewResolver中增加viewClass配置
<bean id="velocityViewResolver"
class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
<property name="viewClass" value="com.steno.hamsrz.utils.VelocityToolbox2View"/>
<property name="cache" value="false" />
<property name="order" value="1" />
<property name="suffix" value=".vm" />
<property name="toolboxConfigLocation" value="/WEB-INF/velocity/toolbox.xml" />
<property name="requestContextAttribute" value="rc" />
<property name="contentType">
<value>text/html;charset=UTF-8</value>
</property>
</bean>
com.steno.hamsrz.utils.VelocityToolbox2View 代码
package com.steno.hamsrz.utils;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.velocity.context.Context;
import org.apache.velocity.tools.Scope;
import org.apache.velocity.tools.ToolManager;
import org.apache.velocity.tools.view.ViewToolContext;
import org.springframework.web.servlet.view.velocity.VelocityToolboxView;
public class VelocityToolbox2View extends VelocityToolboxView {
@Override
protected Context createVelocityContext(Map<String, Object> model,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
ViewToolContext ctx;
ctx = new ViewToolContext(getVelocityEngine(), request, response,
getServletContext());
ctx.putAll(model);
if (this.getToolboxConfigLocation() != null) {
ToolManager tm = new ToolManager();
tm.setVelocityEngine(getVelocityEngine());
tm.configure(getServletContext().getRealPath(
getToolboxConfigLocation()));
if (tm.getToolboxFactory().hasTools(Scope.REQUEST)) {
ctx.addToolbox(tm.getToolboxFactory().createToolbox(
Scope.REQUEST));
}
if (tm.getToolboxFactory().hasTools(Scope.APPLICATION)) {
ctx.addToolbox(tm.getToolboxFactory().createToolbox(
Scope.APPLICATION));
}
if (tm.getToolboxFactory().hasTools(Scope.SESSION)) {
ctx.addToolbox(tm.getToolboxFactory().createToolbox(
Scope.SESSION));
}
}
return ctx;
}
}
toolbox.xml
.<tools>
<toolbox scope="application">
<tool class="com.steno.hamsrz.utils.ReferenceTool"/>
<tool class="org.apache.velocity.tools.generic.FieldTool" include="com.steno.hamsrz.utils.RegexTool"/>
</toolbox>
</tools>
ReferenceTool增加注解
@DefaultKey("reference")
@InvalidScope("{application}")