Velocity基本语法教程

感谢:https://blog.csdn.net/qq_40990306/article/details/130131685

Velocity基本语法

VTL介绍

Velocity Template Language (VTL) , 是Velocity 中提供的一种模版语言 , 旨在提供最简单和最干净的方法来将动态内容合并到网页中。简单来说VTL可以将程序中的动态数展示到网页中

VTL的语句分为4大类:注释 , 非解析内容 , 引用和指令

注释

行注释

## 行注释内容

块注释

#*
块注释内容1
块注释内容2
*#

文档注释

#**
文档注释内容1
文档注释内容2
*#

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
## 我是行注释
 
#*
* 我是块注释
* 呵呵呵
* *#
 
#**
* 我是文档注释
*
* *#
hello , ${name} !
 
</body>
</html>

示例参数

name = "张三"

示例结果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

hello , 张三 !
 
</body>
</html>

非解析内容

所谓非解析内容也就是不会被引擎解析的内容。

语法

#[[
非解析内容1
非解析内容2 
]]#
 

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
 
hello , ${name} !
    
<h1>非解析内容</h1>
#[[
直接输出的内容1
直接输出的内容2
${name}
]]#
</body>
</html>

示例参数

name = "张三"

示例结果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
 
hello , 张三 !
    
<h1>非解析内容</h1>

直接输出的内容1
直接输出的内容2
${name}

</body>
</html>

引用

引用语句就是对引擎上下文对象中的属性进行操作。语法方面分为常规语法($属性)和正规语法(${属性})

变量引用

语法

$变量名, 若上下文中没有对应的变量,则输出字符串"$变量名"
${变量名},若上下文中没有对应的变量,则输出字符串"${变量名}" 
$!变量名, 若上下文中没有对应的变量,则输出空字符串"" 
$!{变量名}, 若上下文中没有对应的变量,则输出空字符串""

属性引用

语法

$变量名.属性, 	若上下文中没有对应的变量,则输出字符串"$变量名.属性"
${变量名.属性}	若上下文中没有对应的变量,则输出字符串"${变量名.属性}"
$!变量名.属性	若上下文中没有对应的变量,则输出字符串""
$!{变量名.属性}	若上下文中没有对应的变量,则输出字符串""

方法引用

方法引用实际就是指方法调用操作,关注点返回值参数 , 方法的返回值将输出到最终结果中

语法

$变量名.方法([入参1[, 入参2]*]?), 常规写法
${变量名.方法([入参1[, 入参2]*]?)}, 正规写法
 
$!变量名.方法([入参1[, 入参2]*]?), 常规写法
$!{变量名.方法([入参1[, 入参2]*]?)}, 正规写法

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>引用</h1>
==================== 变量引用 ====================
#set($name = '123123')
常规语法 : $name
正规语法 : ${name}
 
## 如果获取的变量不存在, 表达式会原样展示 , 如果不想展示 , 可以使用 $!变量名
## 以下写法的含义代表么如果有变量, 那么获取变量值展示, 没有变量展示""
常规语法 : $!name1
正规语法 : $!{name1}

#set($user = {"username": "李四","password": "123123"})
==================== 属性引用 ====================
常规语法 : $user.username --- $user.password
正规语法 : ${user.username} --- ${user.password}
    
==================== 方法引用 ====================
#set($str = "123,123,123")
$str.split(",")
${str.split(",")}

</body>
</html>

示例结果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>引用</h1>
==================== 变量引用 ====================
常规语法 : 123123
正规语法 : 123123
 
常规语法 : 
正规语法 : 

==================== 属性引用 ====================
常规语法 : 李四 --- 123123
正规语法 : 李四 --- 123123
    
==================== 方法引用 ====================
[123, 123, 123]
[123, 123, 123]

</body>
</html>

指令

指令主要用于定义重用模块、引入外部资源、流程控制。指令以 # 作为起始字符。

流程控制

语法

## 在页面中声明定义变量
#set($变量 = 值)
## 流程控制
#if(判断条件)
  .........
#elseif(判断条件)
  .........
#else
  .........
#end 
## 遍历循环数组或者集合($items : 需要遍历的对象或者集合;$item : 变量名称, 代表遍历的每一项;#break : 退出循环)
## $foreach.index : 获取遍历的索引 , 从0开始;$foreach.count : 获取遍历的次数 , 从1开始
## hasNext()判断是否有下一个元素
#foreach($item in $items)
    ..........
    [#break]
#end

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>流程控制</title>
</head>
<body>
=====================定义变量=====================
#set($str = "hello world")
#set($int = 1)
#set($arr = [1,2])
#set($boolean = true)
#set($map = {"key1":"value1", "key2":"value2"})
 
## 在字符串中也可以引用之前定义过的变量
#set($str2 = "$str , how are you !")
<h1>获取set指令定义的变量</h1>
${str}
${int}
${arr}
${boolean}
${map.key1}--${map.key2}
${str2}
=====================逻辑判断=====================
#set($language="PHP")
 
#if($language.equals("JAVA"))
    java开发工程师
#elseif($language.equals("PHP"))
    php开发工程师
#else
    开发工程师
#end
=====================遍历循环=====================
<h1>遍历数组</h1>
#set($hobbies = [1,2])
#foreach($str in $hobbies)
    ${foreach.index} -- ${str}  <br>
#end

<h1>遍历对象集合</h1>
#set($people = [  
    {"name": "Alice", "age": 25},  
    {"name": "Bob", "age": 30},  
    {"name": "Charlie", "age": 35}  
])
#foreach($person in $people)  
    Name: $person.name, Age: $person.age  
#end

<h1>遍历map集合</h1>
<h2>遍历值</h2>
#foreach($value in $map)
	$value
#end
 
<h2>遍历键值对</h2>
#foreach($entry in $map.entrySet())
	$entry.key -- $entry.value
#end

</body>
</html>

示例结果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>流程控制</title>
</head>
<body>
=====================定义变量=====================
 
<h1>获取set指令定义的变量</h1>
hello world
1
[1, 2]
true
value1--value2
hello world , how are you !

=====================逻辑判断=====================
 
    php开发工程师
=====================遍历循环=====================
<h1>遍历数组</h1>
    0 -- 1  <br>
    1 -- 2  <br>

<h1>遍历对象集合</h1>
    Name: Alice, Age: 25  
    Name: Bob, Age: 30  
    Name: Charlie, Age: 35  

<h1>遍历map集合</h1>
<h2>遍历值</h2>
	value1
	value2
 
<h2>遍历键值对</h2>
	key1 -- value1
	key2 -- value2

</body>
</html>

引入资源

语法

## resource可以为单引号或双引号的字符串,也可以为$变量,内容为外部资源路径。
## 路径如果为相对路径,则以引擎配置的文件加载器加载路径作为参考

## 引入外部资源 , 引入的资源不会被引擎所解析
#include(resource)

## 引入外部资源 , 引入的资源将被引擎所解析
#parse(resource)

## 定义重用模块(不带参数)
#define($模块名称)
	模块内容
#end

## 动态计算 , 动态计算可以让我们在字符串中使用变量
#evalute("计算语句")

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>定义模块</h1>
#define($table)
模块内容
#end
==================使用模块==================
$table
$table

<h1>动态计算</h1>
#set($name = "over")
 
#evaluate("#if($name=='over') over  #else  not over #end")

 
</body>
</html>

示例结果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>定义模块</h1>
==================使用模块==================
模块内容

模块内容


<h1>动态计算</h1>
 
 over   

 
</body>
</html>

宏指令

定义重用模块(可带参数)

语法

#macro(宏名 [$arg]?)
   .....
#end

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>定义宏</h1>
#macro(table $list)
<table border="1px">
    <tr>
        <td>编号</td>
        <td>用户名</td>
        <td>密码</td>
        <td>邮箱</td>
        <td>年龄</td>
        <td>操作</td>
    </tr>
    #foreach($item in $list)
    <tr>
        <td>${foreach.count}</td>
        <td>${item.username}</td>
        <td>${item.password}</td>
        <td>${item.email}</td>
        <td>${item.age}</td>
        <td>
            <a href="">编辑</a>
            <a href="">删除</a>
        </td>
    </tr>
    #end
</table>
#end
 
<h1>调用宏</h1>
#set($users = [
{"username": "张三", "password": "12", "email": "123@qq.com", "age": 25},
{"username": "李四", "password": "123", "email": "456456@qq.com", "age": 22},
{"username": "王五", "password": "3456", "email": "qweqwe@qq.com", "age": 78}
])
#table($users)
 
</body>
</html>

示例结果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>定义宏</h1>
 
<h1>调用宏</h1>
<table border="1px">
    <tr>
        <td>编号</td>
        <td>用户名</td>
        <td>密码</td>
        <td>邮箱</td>
        <td>年龄</td>
        <td>操作</td>
    </tr>
    <tr>
        <td>1</td>
        <td>张三</td>
        <td>12</td>
        <td>123@qq.com</td>
        <td>25</td>
        <td>
            <a href="">编辑</a>
            <a href="">删除</a>
        </td>
    </tr>
    <tr>
        <td>2</td>
        <td>李四</td>
        <td>123</td>
        <td>456456@qq.com</td>
        <td>22</td>
        <td>
            <a href="">编辑</a>
            <a href="">删除</a>
        </td>
    </tr>
    <tr>
        <td>3</td>
        <td>王五</td>
        <td>3456</td>
        <td>qweqwe@qq.com</td>
        <td>78</td>
        <td>
            <a href="">编辑</a>
            <a href="">删除</a>
        </td>
    </tr>
</table>
 
</body>
</html>
posted @ 2024-02-27 10:03  喵师傅  阅读(26)  评论(0编辑  收藏  举报