柏竹 柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档

柏竹

奋斗柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档
  • Java基础

  • JavaWeb

  • 拓展技术

    • Java设计模式
    • Java序列化
    • Stream流
    • Lombok简化开发应用
    • JavaZip解压缩
    • Lua应用
    • OpenResty
    • C++快速上手
    • PHP快速上手
    • SpEL表达式
    • velocity模板引擎
      • 语法
        • 引用变量
        • 非解析变量
        • 注释
        • 方法引用
        • 定义变量
        • 逻辑判断
        • 循环
        • 引入模板
        • 外部模板
        • #define
        • #macro
        • 计算指令
      • Java应用
    • Flyway数据库版本管理工具
    • 企业项目实战问题
  • 框架技术

  • 数据库

  • 数据结构

  • Spring

  • SpringMVC

  • SpringBoot

  • SpringClound

  • Ruoyi-Vue-Plus

  • 后端
  • 拓展技术
柏竹
2023-12-08
目录

velocity模板引擎

Velocity 是一个基于Java的模板引擎 , 能够将静态模板文件 , 动态的生成内容 . 将模板文件与Java代码结合使用 , 最终得到理想的输出数据.

# 语法

# 引用变量

语法 : $变量引用

通过占位符替换 (假设填充替换name)

  • $name
  • ${name}
  • $!name
  • $!{name}
  • $user.name

提示

  • 占位符也可对象属性引用
  • 携带有 ! 判断操作 , 不存在空白填充 , 否则引用变量值
引用变量
 - $name
 - ${name}
 - $!name
 - $!{name}
 - $!{name2}
#*
引用变量
 - 柏竹
 - 柏竹
 - 柏竹
 - 柏竹
 - 
*#

# 非解析变量

不进行对内容解析操作

语法 : #[[$name]]#

# 注释

行注释

  • ##

块注释

  • #*<注释内容>*#

# 方法引用

Java对象都会有方法也可在当中引用

假如 : names为 "张三、李四、王五"字符串

$names.split("、")
$names.split("、").length
$names.split("、").max()
#* 
[张三, 李四, 王五]
$names.split("、").length
$names.split("、").max()
*#

不能嵌套引用

# 定义变量

基础语法 : #set($str=<值>)

变量设置
1.数值
#set($num=100)
=> $num
2.字符串
#set($str="hello world")
=> $str
3.数组
#set($arr=["a","b","c"])
=> $arr
4.布尔值
#set($bool=true)
=> $bool

#*
变量设置
1.数值
=> 100
2.字符串
=> hello world
3.数组
=> [a, b, c]
4.布尔值
=> true
*#

# 逻辑判断

语法 : #if(<表达式>) <控制语句1> #else <控制语句2> #end

#set($bool=true)
#if ($bool)
bool is true
#else
bool is false
#end

支持嵌套

#set($num=10)
#if ($num>10)
num is greater than 10
#elseif ($num>5)
num is greater than 5
#else
num is less than 5
#end

# 循环

语法 : #foreach($item in $arr) <循环代码> #end

内置属性

引用 说明
$foreach.index 获取循环遍历的索引 (从0开始)
$foreach.count 获取循环遍历的总计数
#set($arr=["a","b","c"])
#foreach($item in $arr)
=> {item:$item, index:$foreach.index, count:$foreach.count}
#end
#*
=> {item:a, index:0, count:1}
=> {item:b, index:1, count:2}
=> {item:c, index:2, count:3}
*#

跳出循环

语法 : #break (在循环中使用)

跳出循环
#set($arr=["a","b","c"])
#foreach($item in $arr)
=> {item:$item, index:$foreach.index, count:$foreach.count}
#if($foreach.index>=1)
#break
#end
#end
#*
跳出循环
=> {item:a, index:0, count:1}
=> {item:b, index:1, count:2}
*#

# 引入模板

引入模板有三种指令形式

指令 说明
#include 引入外部模板 , 不对其解析
#parse 引入外部模板 , 并对其解析
#define 引入复用模板 , 不携带参数
#macro 引入复用模板 , 携带参数

# 外部模板

#include

在相同资源目录再一个模板直接引用即可

#include("vm/test.vm")

不解析里面的占位符信息

#parse

引入模板并的对其解析

#parse("vm/test.vm")

内外不定义的变量是互通的

点击展开 代码示例

index.vm

引入模板
#set($truename="tom1")
#include("vm/test.vm")
=> $truename

引入模板携带解析
#set($truename="tom2")
#parse("vm/test.vm")
=> $truename
#*
引入模板
模板2测试
$truename
#set($truename="tom2")
=> tom1

引入模板携带解析
模板2测试
tom2
=> tom3
*#

test.vm 外部

模板2测试
$truename
#set($truename="tom3")

# #define

语法 : #define(<模板名>)

声明模块
#define($module)
 - 模块应用
#end

$module
$module
$module

#*
声明模块

 - 模块应用

 - 模块应用

 - 模块应用
*#

模块中定义变量与能互通应用

模块互通变量测试
#define($module1)
#set($username="tom")
#end
#define($module2)
$username
#end

$module1
$module2
=> $username
#*
模块互通变量测试


tom

=> tom
*#

# #macro

语法

#macro(宏名称 [$ages])
...
#end

## 调用
#宏名称([$ages])

示例

宏指令
#macro(macroModule $name,$age)
用户信息
    - $name
    - $age
#end

#macroModule("张三",13)
#macroModule("李四",23)
#macroModule("王五",33)
#macroModule("赵六",43)
#*
宏指令

用户信息
    - 张三
    - 13
用户信息
    - 李四
    - 23
用户信息
    - 王五
    - 33
用户信息
    - 赵六
    - 43
*#

# 计算指令

#evaluate

计算指令
#set($bool=true)
#evaluate("#if($bool) bool is true #else bool is false #end")
#*
计算指令
 bool is true 
*#

# Java应用

依赖

<!--velocity代码生成模板引擎-->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
</dependency>

示例

public static void main(String[] args) throws IOException {
    // 1. 设置 velocity 资源加载器
    Properties properties = new Properties();
    properties.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
    Velocity.init(properties);
    // 2. 创建 velocity 容器 , 并写入数据
    VelocityContext context = new VelocityContext();
    context.put("name","老王");
    SysUser user = new SysUser();
    user.setUserName("柏竹");
    context.put("user",user);
    context.put("names","张三、李四、王五");
    // 3. 加载模板
    Template template = Velocity.getTemplate("vm/index.vm", "UTF-8");
    String path = "D:\\Drill\\GitTemp\\RuoYi-Vue-Plus\\bozhu-demo\\src\\main\\resources\\vm\\index.html";
    FileWriter writer = new FileWriter(path);
    // 4. 合并数据到模板
    template.merge(context, writer);
    writer.close();
}
#velocity模板引擎

← SpEL表达式 Flyway数据库版本管理工具→

最近更新
01
HTTPS自动续签
10-21
02
博客搭建-简化版(脚本)
10-20
03
ruoyi-vue-plus-部署篇
07-13
更多文章>
Theme by Vdoing | Copyright © 2019-2024 | 桂ICP备2022009417号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式