velocity模板库的实际使用

        以前一直使用的jsp,后来看到有说使用模板会更好的说法,正比如较闲,就自学了一下velocity,把以前用jsp作视图的spring mvc项目转换为了用velocity来作视图,下面就一些使用中的问题作一下概括与总结,若有不对的地方,还望你们指出来。html

0、环境准备

         从使用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!!

相关文章
相关标签/搜索