模板引擎 Velocity

Velocity简介html

Velocity是一个基于java的模板引擎(template engine)。它容许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 前端

当Velocity应用于web开发时,界面设计人员能够和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员能够只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为咱们在JSP和PHP以外又提供了一种可选的方案。 java

Velocity的能力远不止web站点开发这个领域,例如,它能够从模板(template)产生SQL和PostScript、XML,它也能够被当 做一个独立工具来产生源代码和报告,或者做为其余系统的集成组件使用。Velocity也能够为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式容许一个web应用以一个真正的MVC模型进行开发。web

Velocity的Eclipse插件的Update地址是:http://propsorter.sourceforge.net/veloeclipseapi

Velocity 的 JavaDoc: http://www.ostools.net/apidocs/apidoc?api=velocity-1.7数组

 

使用模板库最大的不一样是能够脱离 servlet 容器,运行和测试的时候没必要在 servlet 容器下!架构

这是和JSP最大的不一样之处。eclipse

我的感受和freemaker相似:http://freemarker.org/函数

Figure
 

Velocity的一些用法工具

1.截取部分字段substring

1 原始字符串:$!ag.tagValue,也许很长,前端页面展现时须要截取字符串。
2 #set($str=$!ag.tagValue)
3 
4 #if($str.length()>30)
5     #set($str=$str.substring(0,30))
6     $str ...
7 #else
8     $!ag.tagValue
9 #end

使用substring(begin,end)要注意,结束位置为:end索引-1

2.分割成数组split

1 #if($!{result.creType} && $result.creType)
 2   #foreach ($element in $result.creType.split(","))
 3     #if($element == 1)
 4        <script>document.getElementsByName("cretype")[0].checked="checked";</script>
 5     #elseif($element == 2)
 6        <script>document.getElementsByName("cretype")[1].checked="checked";</script>
 7     #else
 8        <script>document.getElementsByName("cretype")[2].checked="checked";</script>              
 9     #end
10   #end
11 #end

3.说到split成数组,就要看数组的几个能够用的方法

velocity 中的数组对应 Java 中的 List 对象。对于 Java 原生 Array 对象, 只可以 #foreach 进行遍历,没法使用 $arr[0] 和 $arr.get(0) 方法。

4.因此学java从不用数组,而用list

--事实上,list很方便,但list比数组效率低不少倍

  • $myarray.isEmpty()list是否为空
  • $myarray.size()获取list元素个数
  • $myarray.get(2)获取list指定下标的元素
  • $myarray.add()增长元素

5.计数用$velocityCount

在foreach中velocityCount表示循环的次数,从1开始,表明第一个循环。

6.空null和空字符串""的判断

在velocity中,非null被认为是真的,因此,判断null能够用

1 #if($!变量名)
2  ……
3 #else
4  ……
5 #end

或者既能够判断null也能够判断空字符串

1 #if("$!varName" != "")
2  不为null 或 ""
3 #else
4  ……
5 #end

7.基本语法错误#end不要忘

最开始的时候常常#if就完了报错,后来都是写完if就end,最后写中间。

8.#macro其实也很简单

原来感受不懂不敢碰,自从写了个velocity分页后就突然以为宏不要太好用。事情是这样的,当时地区三级联动须要多处调用,提取出成公共模块,用#parse导入后出现冲突,由于一个页面用两次地区联动代码,id就重复了。因而想把id给变成参数,当我须要这个公用代码的时候,把id当参数传进去,最后render的结果就是html代码的id为个人参数。这样看来,宏就是一个函数。

想要用宏,先写好,而后parse,而后调用。

一个简单的宏函数:

1 #macro( d )
2 <tr><td></td></tr>
3 #end

使用它:若是在本页面,直接#d,若是是单独写了一个模板文件,那么须要先#parse(文件路径),再#d,如同js外部引用。

传参数的宏:

1 #macro( tablerows $color $somelist )
2 #foreach( $something in $somelist )
3 <tr><td bgcolor=$color>$something</td></tr>
4 #end
5 #end

一个综合使用,分页

9.引用外部文件#include和#parse

我开始常常用#include,后来发现刷新页面没变化,用#parse就行了。字面理解,一个是直接拿过来,一个是解析后。因此,若是是传html代码,能够直接include;如果包含velocity代码的要编译#parse.

相关文章
相关标签/搜索