spring 3.0.5 的org.springframework.web.servlet.view.velocity.VelocityToolboxView 类只支持1.X的velocitytools,如果想让spring支持新版本的tools,只要重写org.springframework.web.servlet.view.velocity.VelocityToolboxView这个类的createVelocityContext方法,然后在配置文件里指定使用新的viewClass。
package
com.rsoft.spring.controller;
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 VelocityToolbox20View extends VelocityToolboxView {
@Override
protected Context createVelocityContext(Map < String, Object > model, HttpServletRequest request,
HttpServletResponse response) throws Exception { // Create a
// ChainedContext
// instance.
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;
}
}
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 VelocityToolbox20View extends VelocityToolboxView {
@Override
protected Context createVelocityContext(Map < String, Object > model, HttpServletRequest request,
HttpServletResponse response) throws Exception { // Create a
// ChainedContext
// instance.
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;
}
}
相关视图配置
<
bean
id
="velocityViewResolver"
class
="org.springframework.web.servlet.view.velocity.VelocityViewResolver"
>
< property name ="order" value ="0" />
< property name ="cache" value ="true" />
< property name ="prefix" value ="" />
< property name ="suffix" value =".html" />
< property name ="toolboxConfigLocation" value ="/WEB-INF/tools.xml" />
< property name ="viewClass" value =" com.rsoft.spring.controller.VelocityToolbox20View" />
< property name ="contentType" >
< value > text/html;charset=UTF-8 </ value >
</ property >
< property name ="order" value ="0" />
< property name ="cache" value ="true" />
< property name ="prefix" value ="" />
< property name ="suffix" value =".html" />
< property name ="toolboxConfigLocation" value ="/WEB-INF/tools.xml" />
< property name ="viewClass" value =" com.rsoft.spring.controller.VelocityToolbox20View" />
< property name ="contentType" >
< value > text/html;charset=UTF-8 </ value >
</ property >
</bean>