Spring MVC 4.0 + Velocity Tools 2.0遇到的问题

来源:互联网 发布:java数据库开发培训 编辑:程序博客网 时间:2024/06/01 09:24

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>
0 0
原创粉丝点击