Velocity 语法详解「建议收藏」

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

大家好,又见面了,我是你们的朋友全栈君。

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

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

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

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

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

  4. 转换 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)
    <p>${velocityCount}. This is ${element}</p>
#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)
    <p>condition > 5</p>
#elseif($condition == 5)
    <p>condition = 5</p>
#else
    <p>condition < 5</p>
#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

 

转载于:https://www.cnblogs.com/Jimc/p/9789655.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159035.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • maria和mysql_mysql为什么没有淘汰

    maria和mysql_mysql为什么没有淘汰mysql:driver驱动类为:com.mysql.jdbc.Driverurl为:jdbc:mysql://localhost:3306/testmariadbdriver驱动类为:org.mariadb.jdbc.Driverurl为:jdbc:mariadb://localhost:3306/test

    2025年7月9日
    1
  • vim编辑模式、vim命令模式

    vim编辑模式、vim命令模式

    2022年3月13日
    46
  • loadrunner11 post请求接口压力测试并生成报告「建议收藏」

    loadrunner11 post请求接口压力测试并生成报告「建议收藏」以管理员身份运行loadRunner,进行脚本编写新建脚本选择http请求默认弹出窗口直接关闭就可以选泽scriot-点击action-输入执行脚本Action(){web_custom_request(“222″,”URL=http://10.129.2.121:8082/api/vehicle_license/base64_image”,”Method=POST”,

    2022年7月17日
    42
  • 深度学习:有监督学习、无监督学习和半监督学习

    深度学习:有监督学习、无监督学习和半监督学习是否有监督(supervised),就看输入数据是否有标签(label)。输入数据有标签,则为有监督学习,没标签则为无监督学习。文章目录一、监督式学习二、无监督式学习三、半监督式学习一、监督式学习在监督式学习下,输入数据被称为“训练数据”,每组训练数据有一个明确的标识或结果,如对防垃圾邮件系统中“垃圾邮件”“非垃圾邮件”,在建立预测模型的时候,监督式学习建立一个学习过程,将预测结果与“训练…

    2022年5月8日
    117
  • pycharm打包后的exe运行不起_pygame打包成exe闪退

    pycharm打包后的exe运行不起_pygame打包成exe闪退在网上找了很多解决方法,有人说是需要添加环境变量,有人说是需要把import的包放到要打包的文件的同一文件夹下,折腾了一晚上一一排查后都不行,最后加了一个python交流群,在大佬的指导下解决了问题,为了感谢python交流群的帮助以及大佬的无私奉献,这里将群号列出帮忙打个广告,群号:786788101,大佬qq号:3124265576,再次感谢。言归正传,解决方法是在报错目录下寻找pyinstaller这个文件夹,如果没有的话找到你的python安装目录,将C:\ProgramFiles(x86)

    2022年8月26日
    19
  • MFC + CxImage 实现自绘半透明按钮

    MFC + CxImage 实现自绘半透明按钮

    2021年8月27日
    59

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号