之前一直使用的jsp,后来看到有说使用模板会更好的说法,正好比较闲,就自学了一下velocity,把之前用jsp做视图的spring mvc项目转换为了用velocity来做视图,下面就一些使用中的问题做一下归纳与总结,如有不对的地方,还望大家指出来。
0、环境准备
从使用velocity的角度来说,需要velocity的jar以及必须要的依赖,commons-lang、commons-collections,一般情况下还会需要velocity-tools,然后就会产生一大堆的依赖,但是经过实际使用检测,其实不添加那些依赖也不会有问题(或许是我没有使用到那部分功能,其实增强包里面的很多功能都不会用到的)。
maven依赖配置:
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-tools</artifactId>
<version>2.0</version>
<exclusions>
<exclusion>
<artifactId>struts-core</artifactId>
<groupId>org.apache.struts</groupId>
</exclusion>
<exclusion>
<artifactId>struts-taglib</artifactId>
<groupId>org.apache.struts</groupId>
</exclusion>
<exclusion>
<artifactId>struts-tiles</artifactId>
<groupId>org.apache.struts</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>commons-digester</groupId>
<artifactId>commons-digester</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>commons-chain</groupId>
<artifactId>commons-chain</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>oro</groupId>
<artifactId>oro</artifactId>
<version>2.0.8</version>
</dependency>
<dependency>
<groupId>sslext</groupId>
<artifactId>sslext</artifactId>
<version>1.10-4</version>
</dependency>
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.4.01</version>
</dependency>
1、各种情况的变量显示
最直接的方式就是${变量名},但是这种写法在变量为null的情况会出问题,所以一般都使用$!{变量名}的方式进行;而且对于一个对象的某一个属性的取值,使用$!{对象名.属性名},这里要求类符合javabean的规范(setter和getter方法),也等效于$!{对象名.getXxx()},这是调用get方法(可得调用其他的可调用的方法都可以)。
比起jsp,velocity的代码可以直接地和html代码写在一起,因为velocity引擎会进行处理,例如这里的id属性(貌似el表达式也支持这种写法)。
<input type="button" value='删除' class="table_btn table_btn_delete table_delete" id="${ccbox.id}">
2、取值与循环
取值在前面实际已经提到了,使用${变量名}地方式就是取值,和循环地代码合在一起就是这样的
#foreach($ccbox in ${ccboxList})
$!{ccbox.name}
#end
使用“a in b”地形式,b是需要遍历地集合,a是每次遍历时的形式参数。
和jsp里面地jstl标签不同的是,“结束“使用#end地方式表示,velocity地其他需要“结束”地标签也使用这个标记。
使用`$foreach.count`也可以获取当前循环次数(从1开始),使用`$foreach.index`得到的序号是从0开始的,使用`$foreach.hasNext`更可以获取是否是最后一次循环,使用`$foreach.first`和`$foreach.last`可以分别获取开始和结束的元素。
在循环体中使用`#break`可中止循环。
3、条件判断
这是一个判断字符串不为空的时候进行输出的语法
#if("$!{ccbox.company}" != "")
$!{ccbox.company}
#end
在判断地条件表达式为true的时候才会执行被包裹的表达式。
4、包含其他文件
这里由两个语法,
- `#parse`会将包含的文件中的内容当作类似源代码来处理,文件内容会进行velocity模板方面的解析;
- `#include`则会仅仅将文件内容当作普通文本进行处理,原封不动放进结果中
用法类似于
<div class="foot">#parse("foot.html")</div>
5、宏
类似于函数,在velocity-tools中定义了很多,和spring mvc结合使用的时候spring也有提供一些(需要依赖velocity-tools支持),使用#name(参数)的形式进行使用,下面是使用spring的国际化功能
<span class="right">#springMessage("COMMON_system_name")</span>
spring的url路经计算功能(这样写得到的结果是基于项目根路径的)
<script src='#springUrl("/js/navi.js")'></script>
enjoy!!