以前一直使用的jsp,后来看到有说使用模板会更好的说法,正比如较闲,就自学了一下velocity,把以前用jsp作视图的spring mvc项目转换为了用velocity来作视图,下面就一些使用中的问题作一下概括与总结,若有不对的地方,还望你们指出来。html
从使用velocity的角度来讲,须要velocity的jar以及必需要的依赖,commons-lang、commons-collections,通常状况下还会须要velocity-tools,而后就会产生一大堆的依赖,可是通过实际使用检测,其实不添加那些依赖也不会有问题(或许是我没有使用到那部分功能,其实加强包里面的不少功能都不会用到的)。java
maven依赖配置:spring
<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>
最直接的方式就是${变量名},可是这种写法在变量为null的状况会出问题,因此通常都使用$!{变量名}的方式进行;并且对于一个对象的某一个属性的取值,使用$!{对象名.属性名},这里要求类符合javabean的规范(setter和getter方法),也等效于$!{对象名.getXxx()},这是调用get方法(可得调用其余的可调用的方法均可以)。apache
比起jsp,velocity的代码能够直接地和html代码写在一块儿,由于velocity引擎会进行处理,例如这里的id属性(貌似el表达式也支持这种写法)。api
<input type="button" value='删除' class="table_btn table_btn_delete table_delete" id="${ccbox.id}">
取值在前面实际已经提到了,使用${变量名}地方式就是取值,和循环地代码合在一块儿就是这样的bash
#foreach($ccbox in ${ccboxList}) $!{ccbox.name} #end
使用“a in b”地形式,b是须要遍历地集合,a是每次遍历时的形式参数。mvc
和jsp里面地jstl标签不一样的是,“结束“使用#end地方式表示,velocity地其余须要“结束”地标签也使用这个标记。dom
使用`$foreach.count`也能够获取当前循环次数(从1开始),使用`$foreach.index`获得的序号是从0开始的,使用`$foreach.hasNext`更能够获取是不是最后一次循环,使用`$foreach.first`和`$foreach.last`能够分别获取开始和结束的元素。jsp
在循环体中使用`#break`可停止循环。maven
这是一个判断字符串不为空的时候进行输出的语法
#if("$!{ccbox.company}" != "") $!{ccbox.company} #end
在判断地条件表达式为true的时候才会执行被包裹的表达式。
这里由两个语法,
- `#parse`会将包含的文件中的内容看成相似源代码来处理,文件内容会进行velocity模板方面的解析; - `#include`则会仅仅将文件内容看成普通文本进行处理,原封不动放进结果中
用法相似于
<div class="foot">#parse("foot.html")</div>
相似于函数,在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!!