velocity模板库的实际使用

        之前一直使用的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!!

转载于:https://my.oschina.net/songxinqiang/blog/710504

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值