关于velocity tool2.0+springMVC的配置

Posted roychenyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于velocity tool2.0+springMVC的配置相关的知识,希望对你有一定的参考价值。


1、  layout 的配置

在spring的配置文件中,先配置对于vm文件的解析

如下

</pre><p></p><p align="left"><pre name="code" class="html"><bean id="viewResolver"class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver"> 
<!--    view解析器需要使用需要使用org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver
     当不需要使用layout布局时,使用org.springframework.web.servlet.view.velocity.VelocityViewResolver
-->
    <property name="viewClass" value="com.cy.wxs.velocity.VelocityToolbox2View"/>
       <!-- <property name="viewClass"value="org.springframework.web.servlet.view.velocity.VelocityLayoutView"/>
 -->
   <property name="cache" value="true"/>
    <property name="prefix" value=""/>
    <property name="suffix" value=".vm"/>
   <property name="contentType" value="text/html;charset=utf-8" />
    <property name="layoutUrl" value="/layout/layout.vm"/>
    <property name="requestContextAttribute" value="ac" />
    <property name="order" value="1"/>
    <property name="numberToolAttribute" value="numbertool" />
    <property name="dateToolAttribute" value="datetool" />
     <property name="toolboxConfigLocation"value="WEB-INF/vm/conf/velocity-toolbox.xml"/>             
       
</bean>
然后添加velocityConfig配置,如下:
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
   <property name="resourceLoaderPath" value="/WEB-INF/vm/"/>
 <!--    <propertyname="configLocation" value="/WEB-INF/vm/conf/velocity.properties"/>-->
 <property name="velocityProperties">
          <props>
            <prop key="input.encoding">UTF-8</prop>
            <prop key="output.encoding">UTF-8</prop>
            <!-- <prop key="contentType">text/html;charset=UTF-8</prop>-->
            <prop key="velocimacro.library">conf/VM_global_library.vm,conf/VM_wml_library.vm,conf/VM_wxs_library.vm</prop>
          </props>
        </property>
</bean>


 

 

如上:layoutUrl配置默认模板的路径,路径= resourceLoaderPath+ layoutUrl即可以得到布局文件的绝对路径

如此layout即配置成功,如果在实际的工程中,需要切换到其他的布局文件,即可在对应的vm文件中的开始添加#set($layout="layout/layout.vm"),配置文件的实际路径,为 resourceLoaderPath加layout。

 

2、添加宏文件的问题,可以在velocityConfig中添加  <prop key="velocimacro.library">conf/VM_global_library.vm,conf/VM_wml_library.vm,conf/VM_wxs_library.vm</prop>

value为字符串数组,用(,)隔开即可配置多个宏文件)

3、配置velocity-tool

在实际使用中,需要配置一些velocity-tool

spring对最新的velocity tool2.0 的支持不是太好,所以需要扩展viewClass类,才能读取velocitytool.Xml文件。

在没有使用layoutvelocity中,需要可以直接继承VelocityToolboxView类,然后重写createVelocityContext方法,但是VelocityLayoutViewResolver中却无法加载继承VelocityToolboxView的类,而是需要继承VelocityLayoutView,去查找源文件的类,发现VelocityLayoutView继承一样VelocityToolboxView类,所以直接继承VelocityLayoutView然后重写createVelocityContext方法,如下:

package com.cy.wxs.velocity;
 
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.VelocityLayoutView;
 
 
public classVelocityToolbox2View extends VelocityLayoutView
     @Override
        protected ContextcreateVelocityContext(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;
        
 


4、关于velocity tool2.0

Velocity的配置文件较与之前的配置的版本,在配置上有一些改变,具体的配置方法在velocity-tool2.0.jar包的位置:org.apache.velocity.tools.generic

以上是关于关于velocity tool2.0+springMVC的配置的主要内容,如果未能解决你的问题,请参考以下文章

如何让spring5.x支持velocity

如何让spring5.x支持velocity

Spring中使用Velocity模板

Velocity初探小结--Velocity在spring中的配置和使用

Spring MVC整合Velocity详解

Spring MVC整合Velocity