Velocity配置详解(三)
一 springmvc中velocity配置详解
1.1 web.xml配置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:common/common.xml
</param-value>
</context-param>
注: common.xml可以随便取名,知道是velocity的配置就行。
1.2 common.xml (velocity.xml的配置)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName">
<!-- 配置velocity引擎 -->
<bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath">
<value>/WEB-INF/templates</value> <!-- 模板存放的路径 -->
</property>
<property name="configLocation">
<value>classpath:common/velocity.properties</value>
</property>
<property name="velocityProperties">
<props>
<prop key="directive.foreach.counter.name">loopCounter</prop>
<prop key="directive.foreach.counter.initial.value">0</prop>
<prop key="directive.foreach.iterator.name">loopHasNext</prop>
</props>
</property>
</bean>
<!--配置视图的显示:配置附加工具,以及将后缀为vm的文件交给下面的Resolver处理-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">
<property name="toolboxConfigLocation" value="/WEB-INF/toolbox.xml"/> <!--toolbox配置文件路径-->
<property name="prefix" value="/"/> <!-- 视图文件的前缀,即存放的路径 -->
<property name="suffix" value=".vm" /> <!-- 视图文件的后缀名 -->
<property name="layoutUrl" value="layout/layout.vm" /> <!--指定layout文件-->
<property name="contentType" value="text/html;charset=UTF-8" /> <!--指定编码-->
<property name="exposeSpringMacroHelpers" value="true" /> <!--是否使用spring对宏定义的支持-->
<property name="layoutKey" value="layout"></property>
<property name="screenContentKey" value="screen_content" />
<property name="dateToolAttribute">
<value>dateTool</value> <!--日期函数名称-->
</property>
<property name="numberToolAttribute">
<value>numberTool</value> <!--数字函数名称-->
</property>
<property name="allowRequestOverride" value="true" />
<property name="exposeRequestAttributes" value="true" /> <!--是否开放request属性-->
<property name="exposeSessionAttributes" value="true" /> <!--是否开放session属性-->
<property name="requestContextAttribute" value="rc"/> <!--request属性引用名称-->
</bean>
</beans>
注: 配置layoutUrl设定系统默认的模板路径
layoutKey设定模板文件键值,设定该值后就可以在vm文件中使用该键值设置模板路径,
screenContentKey表示指定vm文件显示位置
layoutKey设定模板文件键值,设定该值后就可以在vm文件中使用该键值设置模板路径,
screenContentKey表示指定vm文件显示位置
1.3 velocity.properties配置
#模板编码:
input.encoding=ISO-8859-1 //模板输入编码
output.encoding=ISO-8859-1 //模板输出编码
#foreach配置
directive.foreach.counter.name = velocityCount //计数器名称
directive.foreach.counter.initial.value = 1 //计数器初始值
directive.foreach.maxloops = -1 //最大循环次数,-1为默认不限制 directive.foreach.iterator.name = velocityHasNex //迭代器名称
#set配置
directive.set.null.allowed = false //是否可设置空值
#include配置
directive.include.output.errormsg.start = <!-- include error : //错误信息提示开始字符串
directive.include.output.errormsg.end = see error log --> //错误信息提示结束字符串
#parse配置
directive.parse.max.depth = 10 //解析深度
模板加载器配置
resource.loader = file //模板加载器类型,默认为文件,可定义多个
file.resource.loader.description = Velocity File Resource Loader //加载器描述
file.resource.loader.class = Velocity.Runtime.Resource.Loader.FileResourceLoader //加载器类名称
file.resource.loader.path = . //模板路径
file.resource.loader.cache = false //是否启用模板缓存
file.resource.loader.modificationCheckInterval = 2 //检查模板更改时间间隔
宏配置
velocimacro.permissions.allow.inline = true //是否可以行内定义
velocimacro.permissions.allow.inline.to.replace.global = false //是否可以用行内定义代替全局定义
velocimacro.permissions.allow.inline.local.scope = false //行内定义是否只用于局部
velocimacro.context.localscope = false //宏上下文是否只用于局部
velocimacro.max.depth = 20 //解析深度
velocimacro.arguments.strict = false //宏参数是否启用严格模式
资源管理器配置
resource.manager.class = Velocity.Runtime.Resource.ResourceManagerImpl //管理器类名称
resource.manager.cache.class = Velocity.Runtime.Resource.ResourceCacheImpl //缓存器类名称
解析器池配置
parser.pool.class = Velocity.Runtime.ParserPoolImpl //解析池类名称
parser.pool.size = 40 //初始大小
#evaluate配置
directive.evaluate.context.class = Velocity.VelocityContext //上下问类名称
可插入introspector配置
runtime.introspector.uberspect = Velocity.Util.Introspection.UberspectImpl //默认introspector类名称
如:我们项目中使用的(根据实际情况,配置几项即可)
tools.view.servlet.error.template = Error.vm
input.encoding=UTF-8
output.encoding=UTF-8
runtime.log = velocity.log
velocimacro.library=VM_global_library.vm
runtime.log.invalid.references = true
file.resource.loader.cache=false
velocimacro.library.autoreload = true
1.4 toolbox.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<toolbox>
<tool>
<key>date</key>
<scope>request</scope>
<class>
org.apache.velocity.tools.generic.DateTool
</class>
<parameter name="format" value="yyyy-MM-dd HH:mm:ss"/>
</tool>
<tool>
<key>link</key>
<scope>request</scope>
<class>org.apache.velocity.tools.view.tools.LinkTool</class>
</tool>
<tool>
<key>stringUtils</key>
<scope>request</scope>
<class>org.apache.velocity.util.StringUtils</class>
</tool>
<tool>
<key>math</key>
<scope>application</scope>
<class>org.apache.velocity.tools.generic.MathTool</class>
</tool>
<tool>
<key>esc</key>
<scope>request</scope>
<class>org.apache.velocity.tools.generic.EscapeTool</class>
</tool>
<tool>
<key>params</key>
<scope>request</scope>
<class>org.apache.velocity.tools.view.tools.ParameterParser</class>
</tool>
</toolbox>
注:如果配置了toolbox.xml则在velocity模板中可直接使用java后台代码了。
1.5 layout.vm布局文件配置
路径:根据common.xml配置,此时我的位置为: /WEB-INF/templates/layout/layout.vm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title id="title1">$!page_title</title>
#parse("/layout/commonCss.vm") <!-- 公用css -->
#parse("/layout/commonJs.vm") <!-- 公用js -->
</head>
<body>
$screen_content
</body>
</html>
1.6 default.vm布局文件配置
位置为: /WEB-INF/templates/layout/default.vm
$screen_content
1.7 使用范例
1.7.1 普通页面
#set($page_title="普通页面")
<div>
<p>显示页面内容,好处:加载默认样式,样式统一控制</p>
</div>
注:因为头部与尾部都是统一控制的,所以只需显示中间的内容即可。
1.7.2 自定义页面
#set($page_title="自定义样式页面")
#set($layout="/layout/default.vm")
<div>
<p>设置某页面不使用 velocity配置默认的layout.vm模板,好处:不会加载默认样式,可以自定义</p>
</div>
总结:
通过以上配置后普通页面velocity会自动套用layout/layout.vm模板
如果登录页面需套用自己独特的模板则如下
如:
如果登录页面需套用自己独特的模板则如下
如:
可以在登录页面中添加:
#set($layout="/layout/default.vm")
则登录页面将套用"default.vm"模板,样式需自定义;尤其是样式冲突时,非常好用
版权声明:本文为zengdeqing2012原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。