Velocity是基于Java的模板引擎,它允许页面设计者引用Java中定义的方法。页面设计者和Java开发者能够同时使用MVC的模式开发网站,这样网页设计者能够把精力放在页面的设计上,程序员也可以把精力放在代码开发上。Velocity把Java代码从Web页面中分离, 使网站可维护性更强,同时也在Java服务器页面(JSPs)或者PHP中提供了可视化交互的选择。

Velocity 可以被用在以下场景中:

Web 应用:开发者在不使用 JSP 的情况下,可以用 Velocity 让 HTML 具有动态内容的特性。

源代码生成:Velocity 可以被用来生成 Java 代码、SQL 或者 PostScript。有很多开源和商业开发的软件是使用 Velocity 来开发的。

自动 Email:很多软件的用户注册、密码提醒或者报表都是使用 Velocity 来自动生成的。使用 Velocity 可以在文本文件里面生成邮件内容,而不是在 Java 代码中拼接字符串。

转换 xml:Velocity 提供一个叫 Anakia 的 ant 任务,可以读取 XML 文件并让它能够被 Velocity 模板读取。一个比较普遍的应用是将 xdoc 文档转换成带样式的 HTML 文件。

一、变量

1. 变量定义

velocity 中的变量是弱类型,大小写敏感。

#set($name="velocity")

当使用 set 指令时,等号后面引号中的字面字符串将解析和重新解析,例如出现以  $ 开始的字符串时,将做变量的替换。

#set($hello="hello $name")

上面的这个等式将会给 $hello 赋值为“hello velocity”

2. 变量使用

在模板文件中使用 $name 或者 ${name} 来使用定义的变量。推荐使用 ${name} 这种格式,因为在模板中同时可能定义了类似 $name 和 $names 的两个变量,如果不选用大括号的话,引擎就没有办法正确识别 $names 这个变量。

对于一个复杂对象类型的变量,例如 $person,可以使用 ${person.name} 来访问 person 的 name 属性。值得注意的是,这里的 ${person.name} 并不是直接访问 person 的 name 属性,而是访问 person 的 getName() 方法,所以 ${person.name} 和${person.getName()} 是一样的。

3. 变量赋值

对于 Velocity 来说,变量是弱数据类型的,可以在赋了一个 String 给变量之后再赋一个数字或者数组给它。

赋值的左边必须是一个变量或者属性引用。

赋值的右边可以是以下6种类型之一:

变量引用

字面字符串

属性引用

方法引用

字面数字

数组列表

#set($foo = $bar)

#set($foo ="hello")

#set($foo.name = $bar.name)

#set($foo.name = $bar.getName($arg))

#set($foo = 123)

#set($foo = ["foo",$bar])

注:(1)如果上述例子中右值为 null,则左值不会被赋值,也就是说会保留以前的值。

(2)Velocity 模板中未被定义的变量将会认为是字符串。例如:

#set($foo = $bar)

$foo

输出结果:

$foo

二、循环语句

#set($list=["velocity","freemarker","jsp"])

#foreach($element in $list)

${velocityCount}. This is ${element}

#end

输出结果:

1. This is velocity

2. This is freemarker

3. This is jsp

Velocity 引擎会将 list 中的值循环赋给 element 变量,同时会创建一个 $velocityCount 的变量作为计数,从 1 开始,每次循环都会加 1。

另外,Velocity 中还提供了得到循环次数的方法, $velocityCount 变量的名字是 Velocity 默认的名字。

#foreach($i in [1..3])

$i

#end

输出结果:

1 2 3

三、条件语句

#if($condition > 5)

condition > 5

#elseif($condition == 5)

condition = 5

#else

condition < 5

#end

输出结果:

condition = 5

四、关系操作符

Velocity 引擎提供了 AND、OR 和 NOT 操作符,分别对应 && 、|| 和 ! 。

#set($a=true)

#set($b=false)

#if($a && $b)

This is all true.

#end

五、宏

Velocity 中的宏可以理解为函数定义。

(1)宏的定义:

#macro(宏的名称 $参数1 $参数2 ...)

语句体(即函数体)

#end

(2)宏的调用:

#宏的名称($参数1 $参数2 ...)

注意:参数之间用空格隔开

(3)示例:

#macro(func $args1 $args2)

This is a macro. The argument have ${args1} and ${args2}.

#end

#func("hello" "world")

输出结果:

This is a macro. The argument have hello and world.

六、#parse 与 #include

#parse 与 #include 指令的功能都是在外部引用文件,而两者的区别是,#parse 会将引用的内容当成类似于源码文件,会将内容在引入的地方进行解析,#include 是将引入文件当成资源文件,会将引入内容原封不动地以文本输出。

示例:

foo.vm 文件:

#set($name="velocity")

$name

(1)parse.vm 文件:

#parse("foo.vm")

输出结果:

velocity

(2)include.vm 文件

#include("foo.vm")

输出结果:

#set($name="velocity") $name

velocity参数重新赋值_Velocity 语法详解相关推荐

  1. velocity参数重新赋值_Velocity(5)——#set指令

    引用可以让模板设计者生成动态内容,而指令允许设计者真正的负责页面的展现和内容. 指令是以#开头,后面紧跟一个关键字,比如if,else,foreach等.而这个关键字,是可以被放在{}中间的.这是规范 ...

  2. Velocity魔法堂系列二:VTL语法详解

    一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...

  3. Java8初体验(二)Stream语法详解(转)

    本文转自http://ifeve.com/stream/ Java8初体验(二)Stream语法详解 感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 上篇文章Java8初体验( ...

  4. python编程语法大全-Python编程入门——基础语法详解

    今天小编给大家带来Python编程入门--基础语法详解. 关于怎么快速学python,可以加下小编的python学习群:611+530+101,不管你是小白还是大牛,小编我都欢迎,不定期分享干货 每天 ...

  5. python编程语法-Python编程入门——基础语法详解

    今天小编给大家带来Python编程入门--基础语法详解. 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_num ...

  6. python编程if语法-Python编程入门基础语法详解经典

    原标题:Python编程入门基础语法详解经典 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_number = ...

  7. python编程语法-Python编程入门——基础语法详解(经典)

    今天小编给大家带来Python编程入门--基础语法详解.温馨提示: 亮点在最后! 在这里还是要推荐下我自己建的Python开发学习群:301056051,群里都是学Python开发的,如果你正在学习P ...

  8. python基础编程语法-Python编程入门——基础语法详解

    今天小编给大家带来Python编程入门--基础语法详解. 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_num ...

  9. python基础编程语法-Python编程入门——基础语法详解(经典)

    今天小编给大家带来Python编程入门--基础语法详解.温馨提示: 亮点在最后! 在这里还是要推荐下我自己建的Python开发学习群:301056051,群里都是学Python开发的,如果你正在学习P ...

  10. HBase数据结构与基本语法详解

    HBase数据结构与基本语法详解.背景: 阅读新闻 [日期:2019-01-06] 来源:Linux社区 作者:Linux [字体:大 中 小] HBase中的表一般有这样的特点: 1 大:一个表可以 ...

最新文章

  1. gSTM:Ubuntu 上的 SSH Tunneling 图形界面管理工具
  2. 你想使用自己编译的内核进行工作吗?
  3. [ An Ac a Day ^_^ ] CodeForces 468A 24 Game 构造
  4. 编码方式 / Base 64
  5. as将安卓应用打包_Android Studio打包生成apk的方法(超级简单哦)
  6. mysql主库从库在同一台服务器_MySQL数据库的主从配置(多主对一从)
  7. IOS_OC_id ,NSObject, idlt;NSObjectgt;差别
  8. 推荐系统评价指标综述
  9. EMC测试仪器_智芯文库 | 单片机系统EMC测试和故障排除
  10. ubuntu10.04 MTK开发环境
  11. linux tcp调优
  12. 模拟无线透传的STM32的24L01无线模块与串口USART通信
  13. 2022年基站查询、WiFi查询、GPS/经纬度查询的网站与API接口
  14. c语言大战二十四祖冲之,18祖冲之
  15. MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)
  16. 重装系统要花钱?教你免费一键重装win10系统
  17. 用Keras和直方图均衡化进行深度学习的图像增强
  18. ifconfig 命令使用
  19. mysql中如何求出学生人数,mysql中如何查询同时参加计算机考试和英语考试的学生人数...
  20. 手把手带你入门深度学习(一):保姆级Anaconda和PyTorch环境配置指南

热门文章

  1. Debug工具的使用
  2. Unix和Windows比较
  3. Python经典前端框架:Django,第一天【Django环境搭建】
  4. 支持firefox 3.6的onenote插件
  5. verycd下载资源
  6. Linux学习笔记(尚硅谷韩顺平老师2021最新Linux教程)万字笔记
  7. c语言+Easy X图形库实现飞机大战,源码加素材
  8. 川崎机器人仿真软件K-ROSET破解版的发展历程
  9. picsart旧版本_picsart 2016旧版本下载-picsart 2016版本下载v5.25.4 安卓中文版-2265安卓网...
  10. linux 命令:nohup 详解