工作以后,我越来越能体会到80/20法则的强大。

这是一个不可否认的事实,常用 20% 的技术可以解决工作中 80% 的场景。

所以我希望能介绍给你 Velocity 技术 20%,帮助你胜任 80% 的工作。

废话少说,进入正题。

概要

  1. Velocity 是什么?
  2. Velocity 能做什么?
  3. Velocity 示例

1. Velocity 是什么?

Velocity 是一个基于Java的模版引擎,它提供模版语言用于引用Java代码定义的对象。

2. Velocity 能做什么?

  1. Velocity能创建HTML页面,并预留占位符。(最基本用途)
  2. Velocity能基于模板生成Java,SQL源代码。(没见过)
  3. 自动生成电子邮件。(没见过)
  4. 读取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 教程的更多相关文章

  1. Velocity教程【转】

    原文:http://blog.csdn.net/qq_25237663/article/details/52262532 Velocity是一个基于Java的模板引擎,通过特定的语法,Velocity ...

  2. Velocity教程 (zhuan)

    http://blog.csdn.net/qq_25237663/article/details/52262532 ****************************************** ...

  3. Velocity教程-脚本语法详解(转)

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

  4. Velocity教程

    Velocity 语法(转) 一.基本语法 1."#"用来标识Velocity的脚本语句,包括#set.#if .#else.#end.#foreach.#end.#iinclud ...

  5. velocity 教程

    1,<title> $!{product.name} - $!{title} $!{about.title} - $!{title} $!{news.title} - $!{title} ...

  6. velocity 知识点

    velocity 教程: http://www.51gjie.com/javaweb/126 velocity 语法 语法 说明 关键字以#开头 定义数组 ['aaa','bbb'] 变量以$开头 把 ...

  7. 洛谷——P3369 【模板】普通平衡树(splay)(基础splay,维护一些神奇的东东)

    P3369 [模板]普通平衡树 平衡树大法好,蒟蒻(博主)最近正在收集高级数据结构的碎片,企图合成数据结构的元素之力来使自己的RP++... 您需要写一种数据结构(可参考题目标题),来维护一些数,其中 ...

  8. 1-3SpringBoot之Controller使用

    Controller的使用 @Controller 处理http请求 @RestController Spring4之后新加的注解,原来返回json需要@ResponseBody配合@Controll ...

  9. velocity.js 中文文档 (教程)

    velocity.js 是一个简单易用.高性能.功能丰富的轻量级JS动画库.它能和 jQuery 完美协作,并和$.animate()有相同的 API, 但它不依赖 jQuery,可单独使用. Vel ...

随机推荐

  1. STM32串口控制步进电机(原创)

    用的42步进电机: 厂家可能不一样,两项四线步进电机,里面有两个线圈.在电机什么电都没有接的情况下,用万用表测量四个管脚:两两短接(或者阻值很小)的为一组,可以分别接A+,a-剩余接B+,B-;顺序可 ...

  2. 关于laravel5.2仓库的建立,以及简单调用

    laravel个人比较喜欢,就是控制器里面逻辑代码的分离,这样结构很清晰,有利于后期的维护,现在就把平时工作中运用的仓库模式,分享一下,望指正. *************************** ...

  3. iOS安全攻防之反编译

    Class-dump 进行反编译: 之前做代码混淆, 首先了解了下反编译,使用入门级的反编译 class-dump.下载地址:最新版Class-dump. 首先需要注意的是,class-dump的作用 ...

  4. stickUp.js:98 Uncaught ReferenceError: vartop is not defined at HTMLDocument.<anonymous> (stickUp.js:98)

    附加var vartop = 0;在var topMargin = 0;这之后,这里是我附加的代码:$(document).ready(function(){ var contentButton = ...

  5. 翻译Algorithms Unlocked

    写在前面 本书是由<算法导论>(Introduction to Algorithms)的作者之一Thomas H. Cormen编写的适合对算法感兴趣但自身基础又不好的同学阅读.很多人评价 ...

  6. JVM-4.类加载机制

    目录 一.类加载的基础 二.类加载的过程 三.类加载器:分类 四.类加载器:双亲委托模型 五.类加载器:补充 六.初始化时机/主动引用和被动引用[关于实例初始化,参考<Java编程思想05-初始 ...

  7. html 获取宽高

    jquery获取元素宽高的方法如下 1.元素自身高度 $("#div").height(); 2.元素自身高度 + padding $("#div").inne ...

  8. 基于NIO的Netty网络框架

    Netty是一个高性能.异步事件驱动的NIO框架,它提供了对TCP.UDP和文件传输的支持,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者 ...

  9. 磁盘文件I/O,SSD结构,局部性原理 笔记

    磁盘文件I/O过程 进程向内核发起read scene.dat请求: 内核根据inode获取对应该进程的address space,在address space查找page_cache,如果没有找到, ...

  10. 使用类似于中介者模式实现不同VC之间的跳转

    在2013年的时候,我们就已经实现了类似于http地址进行页面跳转, 那个时候,主要是用继承ViewController和给 UIViewController和UINavigationControll ...