1、SPRing MVC 4.0及更高版本不建议使用Velocity模板引擎,为了继承Velocity并使用Velocity Tools,需要重写viewClass,如下:
import org.apache.velocity.context.Context;import org.apache.velocity.tools.Scope;import org.apache.velocity.tools.ToolManager;import org.apache.velocity.tools.ToolboxFactory;import org.apache.velocity.tools.view.ViewToolContext;import org.springframework.web.servlet.view.velocity.VelocityLayoutView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.util.Map;public class VelocityLayoutToolbox2View extends VelocityLayoutView { private static ToolboxFactory toolboxFactory = null; @Override protected Context createVelocityContext(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception { // Create a ChainedContext instance. ViewToolContext vtc; vtc = new ViewToolContext(getVelocityEngine(), request, response, getServletContext()); vtc.putAll(model); if (toolboxFactory == null) { ToolManager toolManager = new ToolManager(); toolManager.setVelocityEngine(getVelocityEngine()); toolManager.configure(getServletContext().getRealPath(getToolboxConfigLocation())); toolboxFactory = toolManager.getToolboxFactory(); } if (this.getToolboxConfigLocation() != null) { if (toolboxFactory.hasTools(Scope.REQUEST)) { vtc.addToolbox(toolboxFactory.createToolbox(Scope.REQUEST)); } if (toolboxFactory.hasTools(Scope.application)) { vtc.addToolbox(toolboxFactory.createToolbox(Scope.APPLICATION)); } if (toolboxFactory.hasTools(Scope.session)) { vtc.addToolbox(toolboxFactory.createToolbox(Scope.SESSION)); } } return vtc; }}重写后,在applicationContext.xml文件中配置viewClass,如下:
<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver"> <property name="suffix" value=".html" /> <property name="cache" value="false" /> <property name="contentType" value="text/html;charset=utf-8" /> <!-- 日期函数名称 --> <property name="dateToolAttribute" value="date" /> <!-- 数字函数名称 --> <property name="numberToolAttribute" value="number" /> <property name="layoutUrl" value="layout/default.vm" /> <property name="viewClass" value="com.acs.survey.util.VelocityLayoutToolbox2View" /> <property name="toolboxConfigLocation" value="/WEB-INF/velocity-tools.xml" /> </bean>2、Velocity Tools 2.0的配置文件格式和低版本的不同,这是个大坑!!!具体如下: ===低版本格式
<toolbox> <tool> <key>SSOPermission</key> <scope>application</scope> <class>com.baomidou.springwind.common.SSOPermissionTool</class> </tool> <tool> <key>date</key> <scope>application</scope> <class>org.apache.velocity.tools.generic.DateTool</class> </tool> <tool> <key>math</key> <scope>application</scope> <class>org.apache.velocity.tools.generic.MathTool</class> </tool> <tool> <key>number</key> <scope>application</scope> <class>org.apache.velocity.tools.generic.NumberTool</class> </tool> <tool> <key>render</key> <scope>application</scope> <class>org.apache.velocity.tools.generic.RenderTool</class> </tool> <tool> <key>esc</key> <scope>application</scope> <class>org.apache.velocity.tools.generic.EscapeTool</class> </tool> <tool> <key>alternator</key> <scope>application</scope> <class>org.apache.velocity.tools.generic.AlternatorTool</class> </tool> <tool> <key>parser</key> <scope>application</scope> <class>org.apache.velocity.tools.generic.ValueParser</class> </tool> <tool> <key>sorter</key> <scope>application</scope> <class>org.apache.velocity.tools.generic.SortTool</class> </tool></toolbox>===2.0格式
<tools> <toolbox scope="application"> <tool class="com.acs.survey.util.PermissionTool" /> <tool class="org.apache.velocity.tools.generic.DateTool" /> <tool class="org.apache.velocity.tools.generic.MathTool" /> <tool class="org.apache.velocity.tools.generic.NumberTool" /> <tool class="org.apache.velocity.tools.generic.RenderTool" /> <tool class="org.apache.velocity.tools.generic.EscapeTool" /> <tool class="org.apache.velocity.tools.generic.AlternatorTool" /> <tool class="org.apache.velocity.tools.generic.ValueParser" /> <tool class="org.apache.velocity.tools.generic.SortTool" /> </toolbox> <toolbox scope="request"> <tool class="org.apache.velocity.tools.view.LinkTool" /> </toolbox></tools>新闻热点
疑难解答