1、在spring的配置文件里面添加velocity的配置
<!-- velocity config -->
<bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath">
<value>WEB-INF/view</value><!-- 模板页面在项目内的位置 -->
</property>
<property name="velocityProperties">
<props>
<prop key="input.encoding">UTF-8</prop><!-- 编码 -->
<prop key="output.encoding">UTF-8</prop>
<!—用户自定义的宏方法配置文件,位置是相对于模板页面所在的位置 -->
<prop key="velocimacro.library">common/macros.vm</prop>
</props>
</property>
</bean>
<!-- 处理velocity布局 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
<property name="cache" value="true" />
<!—处理页面时,拼接的模板路径前缀 -->
<property name="prefix" value="" />
<!—处理页面时,拼接的模板路径后缀 -->
<property name="suffix" value=".vm" />
<!-- 模板编码 -->
<property name="contentType" value="text/html; charset=utf-8"></property>
<!-- 设置是否通过Spring的宏库暴露一个RequestContext(名为springBindRequestContext)供外部使用,默认值为false。它暴露了处理表单和验证错误信息的宏操作 -->
<property name="exposeSpringMacroHelpers" value="true" />
<!-- 把Spring的RequestContext对象暴露为变量rc -->
<property name="requestContextAttribute" value="rc" />
<!-- 定义了velocity工具类的文件, -->
<property name="toolboxConfigLocation" value="/WEB-INF/velocity_toolbox.xml" />
</bean>
2、用户自定义宏方法配置 macros.vm
例:在文件内定义如此一个宏:
#macro(methodname $param)
#if($param)
$param
#else
“参数为空”
#end
#end
这个方法只是做一个空判断,如果不为空,则把传入的数据返回,否则返回“参数为空”
在模板内的用法也很简单:#methodname($param) 。
3、velocity工具箱配置 velocity_toolbox.xml
例:在文件内引用java的工具类:
<tool>
<!-- 实例化的名字,可以自己随意定义,一般与类名一致,方便阅读 -->
<key>stringUtils</key>
<scope>application</scope>
<class>com.util.StringUtils</class>
</tool>
这样就可以在模板内用$stringUtils.xxx() 来调用java的方法了。
4、模板内使用时注意
由于定义的工具类方法,以及宏方法,在模板内都是先于js代码执行的,所以在使用时传入的参数不能是js的变量
比如下面的例子就是错误的,他会把“+param +” 当做一个参数传给#methodname ,而不是“xxxxxx”:
<script>
var param = “xxxxxx”;
alert(“#methodname(“+param+”)”);
</script>
正确的使用方法是:
#set($param = “xx”)
#methodname($param) 或者 #methodname(“xxx”)