最小的 Velocity 教程
工作以后,我越来越能体会到80/20法则的强大。
这是一个不可否认的事实,常用 20% 的技术可以解决工作中 80% 的场景。
所以我希望能介绍给你 Velocity 技术 20%,帮助你胜任 80% 的工作。
废话少说,进入正题。
概要
- Velocity 是什么?
- Velocity 能做什么?
- Velocity 示例
1. Velocity 是什么?
Velocity 是一个基于Java的模版引擎,它提供模版语言用于引用Java代码定义的对象。
2. Velocity 能做什么?
- Velocity能创建HTML页面,并预留占位符。(最基本用途)
- Velocity能基于模板生成Java,SQL源代码。(没见过)
- 自动生成电子邮件。(没见过)
- 读取XML,并转换成需要的文档格式,通常是HTML。(没见过)
3. Velocity示例
Velocity 注解
单行 ##
多行 #* *#
代码块注释(信息) ##* *#
Velocity 变量
定义:
#set( $foo = "Velocity" )
使用:
$foo
${foo}
Velocity 集合
#set( $greatlakes = ["Superior","Michigan","Huron","Erie","Ontario"] )
Velocity 条件判断
#if( $foo < 10 )
<strong>Go North</strong>
#elseif( $foo == 10 )
<strong>Go East</strong>
#else
<strong>Go West</strong>
#end
Velocity 循环
#foreach( $customer in $customerList )
#if( $foreach.count > 5 )
#break
#end
$customer.Name
#end
Velocity 引用文件
#include( "one.vm" ) one.vm 不解析。
#parse( "me.vm" ) me.vm 解析。
Velocity 定义代码块
#define( $block )
Hello $who
#end
#set( $who = 'World!' )
$block
Velocity 宏调用
- 无参
#macro( d )
<tr><td></td></tr>
#end
#d()
- 单参
#macro( d )
<tr><td>$!bodyContent</td></tr>
#end
#@d()Hello#end
- 任意参数
定义
#macro( tablerows $color $somelist )
#foreach( $something in $somelist )
<tr><td bgcolor=$color>$something</td></tr>
#end
#end
调用
#set( $greatlakes = ["Superior","Michigan","Huron","Erie","Ontario"] )
#set( $color = "blue" )
<table>
#tablerows( $color $greatlakes )
</table>
输出
<table>
<tr><td bgcolor="blue">Superior</td></tr>
<tr><td bgcolor="blue">Michigan</td></tr>
<tr><td bgcolor="blue">Huron</td></tr>
<tr><td bgcolor="blue">Erie</td></tr>
<tr><td bgcolor="blue">Ontario</td></tr>
</table>
Velocity 填坑
1. 各种写法
$foo
## is the same as
${foo}
$foo.getBar()
## is the same as
$foo.Bar
$data.setUser("jon")
## is the same as
#set( $data.User = "jon" )
$data.getRequest().getServerName()
## is the same as
$data.Request.ServerName
## is the same as
${data.Request.ServerName}
2. Velocity 变量未定义
使用 $!,例
$!foo
当 foo 未定义,输出空白字符串。
3. Velocity 调用顺序
Velocity中$customer.address,调用顺序:
getaddress()
getAddress()
get("address")
isAddress()
4. #if ($foo)
两种情况都返回true:
(1)$foo是一个 boolean 类型,且为 true。
(2)$foo不是 0,也不是 null。
5. #if ($foo == $bar)
因为Velocity变量最终都作为字符串输出,所以Velocity会自动调用 .toString() 将变量转换成字符串。
所以,$foo 和 $bar 都当成字符串进行比较。即使Java代码中类型不同,也有可能返回true。
Velocity 严格模式
Velocity 1.6引入严格引用模式,通过设置Velocity配置属性“runtime.references.strict”为true激活。
当遇到没有定义或者存在歧义的情况Velocity将抛出异常。
希望这篇文章对你有帮助。by iamtjcn
最小的 Velocity 教程的更多相关文章
- Velocity教程【转】
原文:http://blog.csdn.net/qq_25237663/article/details/52262532 Velocity是一个基于Java的模板引擎,通过特定的语法,Velocity ...
- Velocity教程 (zhuan)
http://blog.csdn.net/qq_25237663/article/details/52262532 ****************************************** ...
- Velocity教程-脚本语法详解(转)
Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象. 当Veloci ...
- Velocity教程
Velocity 语法(转) 一.基本语法 1."#"用来标识Velocity的脚本语句,包括#set.#if .#else.#end.#foreach.#end.#iinclud ...
- velocity 教程
1,<title> $!{product.name} - $!{title} $!{about.title} - $!{title} $!{news.title} - $!{title} ...
- velocity 知识点
velocity 教程: http://www.51gjie.com/javaweb/126 velocity 语法 语法 说明 关键字以#开头 定义数组 ['aaa','bbb'] 变量以$开头 把 ...
- 洛谷——P3369 【模板】普通平衡树(splay)(基础splay,维护一些神奇的东东)
P3369 [模板]普通平衡树 平衡树大法好,蒟蒻(博主)最近正在收集高级数据结构的碎片,企图合成数据结构的元素之力来使自己的RP++... 您需要写一种数据结构(可参考题目标题),来维护一些数,其中 ...
- 1-3SpringBoot之Controller使用
Controller的使用 @Controller 处理http请求 @RestController Spring4之后新加的注解,原来返回json需要@ResponseBody配合@Controll ...
- velocity.js 中文文档 (教程)
velocity.js 是一个简单易用.高性能.功能丰富的轻量级JS动画库.它能和 jQuery 完美协作,并和$.animate()有相同的 API, 但它不依赖 jQuery,可单独使用. Vel ...
随机推荐
- php 关于经纬度距离计算方法 成功版
1.PHP实现通过经纬度计算距离 单位为公里 function getdistance($lng1,$lat1,$lng2,$lat2)//根据经纬度计算距离 { //将角度转为狐度 $radLat ...
- 第十五章(附)分布式缓存-Memcached
一.概念 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能. 二.适用场合 1.分布式应用.由于 ...
- SparkMLlib回归算法之决策树
SparkMLlib回归算法之决策树 (一),决策树概念 1,决策树算法(ID3,C4.5 ,CART)之间的比较: 1,ID3算法在选择根节点和各内部节点中的分支属性时,采用信息增益作为评价标准.信 ...
- javase基础回顾(四) 自定义注解与反射
本篇文章将从元注解.自定义注解的格式.自定义注解与反射结合的简单范例.以及自定义注解的应用来说一说java中的自定义注解. 一.元注解 元注解也就是注解其他注解(自定义注解)的java原生的注解,Ja ...
- SAS PROC MCMC example in R: Logistic Regression Random-Effects Model(转)
In this post I will run SAS example Logistic Regression Random-Effects Model in four R based solutio ...
- stm之SPI通信协议
SPI (Serial Peripheral interface),顾名思义就是串行外围设备接口.SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为P ...
- Python教程(2.2)——数据类型与变量
和C/C++.Java一样,Python也有数据类型和变量两个概念. 数据类型 Python中的几个基本数据类型为整数(integer/int).浮点数(float/float).布尔值(boolea ...
- 一天搞定HTML----常用标签01
1.常用标签说明 2.其他类标签演示 代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...
- java面试题之int和Integer的区别
int和Integer的区别 1.Integer是int的包装类,int则是java的一种基本数据类型 2.Integer变量必须实例化后才能使用,而int变量不需要 3.Integer实际是对象的引 ...
- 从RGB色转为灰度色算法
一.基础 对于彩色转灰度,有一个很著名的心理学公式: Gray = R*0.299 + G*0.587 + B*0.114 二.整数算法 而实际应用时,希望避免低速的浮点运算,所以需要整数算法. 注 ...