Velocity模板引擎——若依代码生成器

news2024/11/14 7:16:30

文章目录

  • 快速入门
    • 准备模板
    • 数据填充
    • 运行代码
  • 基础语法
    • 简单类型的变量获取
    • 对象类型的变量获取
    • 基础语法-循环
    • 基础语法—if判断

官网
在这里插入图片描述
比较擅长用于邮件,发票,web内容生成、代码生成、网页静态化
模板化的东西适合使用
当然模板引擎不止这一种,还有freemarker、thymeleaf等等.
若依选择Velocity

快速入门

在这里插入图片描述
把加油同学改为加油少年
在这里插入图片描述

准备模板

用ai生成一个html的页面

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>页面标题</title>
    <!-- 这里可以添加 CSS 链接或内联样式 -->
    <link rel="stylesheet" href="styles.css">
    <!-- 或者内联样式表 -->
    <!-- <style>
        /* 内联 CSS 样式 */
    </style> -->
</head>
<body>

<!-- 页面内容 -->
<header>
    <h1>心怀梦想,坚持不懈,成功即在眼前。 ${message}</h1>
    <nav>
        <ul>
            <li><a href="#">链接 1</a></li>
            <li><a href="#">链接 2</a></li>
            <li><a href="#">链接 3</a></li>
        </ul>
    </nav>
</header>
<main>
    <article>
        <h2>文章标题</h2>
        <p>文章内容...</p>
    </article>

</main>
<footer>
    <p>版权所有 © 2023 你的网站名称</p>
</footer>

<!-- 这里可以添加 JavaScript 脚本 -->
<script src="scripts.js"></script>
<!-- 或者内联脚本 -->
<!-- <script>
    // 内联 JavaScript 代码
</script> -->
</body>
</html>

数据填充

package com.dkd.test;

import com.dkd.generator.util.VelocityInitializer;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;

import java.io.FileWriter;
import java.io.IOException;

public class VelocityDemoTest {
    public static void main(String[] args) throws IOException {
        // 1. 初始化模板引擎
        VelocityInitializer.initVelocity();
        // 2. 准备模板数据模型
        VelocityContext velocityContext = new VelocityContext();
        velocityContext.put("message", "加油同学");
        // 3. 读取模板
        Template template = Velocity.getTemplate("vm/index.html.vm", "UTF-8");
        // 4. 合并渲染模板
        FileWriter fileWriter = new FileWriter("D:\\index.html");  // 输出到文件
        template.merge(velocityContext, fileWriter);
        fileWriter.close();

    }
}

运行代码

在这里插入图片描述

基础语法

简单类型的变量获取

在这里插入图片描述

## 定义变量
#set($name="Velocity")

## 输出变量
第一种情况: ${name} <br>
第二种情况: $name <br>
## 第三中情况 : orderService
#set($column="order")
字符串拼接: ${column}Service<br>

在这里插入图片描述

对象类型的变量获取

写一个实体类

package com.dkd.test;

import com.dkd.common.annotation.Excel;
import com.dkd.common.core.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;


@Data
@NoArgsConstructor
@AllArgsConstructor
public class Region extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键id */
    private Long id;

    /** 区域名称 */
    @Excel(name = "区域名称")
    private String regionName;
}

准备模型数据
在这里插入图片描述

package com.dkd.test;

import com.dkd.generator.util.VelocityInitializer;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;

import java.io.FileWriter;
import java.io.IOException;

public class VelocityDemoTest {
    public static void main(String[] args) throws IOException {
        // 1. 初始化模板引擎
        VelocityInitializer.initVelocity();
        // 2. 准备模板数据模型
        VelocityContext velocityContext = new VelocityContext();
        velocityContext.put("message", "加油同学");
        // 创建区域对象
        Region region = new Region(1L, "北京北五环");
        velocityContext.put("region", region);
        // 3. 读取模板
        Template template = Velocity.getTemplate("vm/index.html.vm", "UTF-8");
        // 4. 合并渲染模板
        FileWriter fileWriter = new FileWriter("D:\\index.html");  // 输出到文件
        template.merge(velocityContext, fileWriter);
        fileWriter.close();

    }
}

模板中获取

## 获取区域对象中的数据
$region<br>
区域ID: $region.id<br>
区域名称: $region.regionName<br>

基础语法-循环

在这里插入图片描述

  // 创建区域对象
        Region region1 = new Region(1L, "北京北五环");
        Region region2 = new Region(2L, "北京北四环");
        velocityContext.put("region", region1);
        List<Region> regionList = List.of(region1, region2);
        velocityContext.put("regionList", regionList);
## 遍历区域集合
#foreach($region in $regionList)
    区域ID: $region.id
    区域名称: $region.regionName<br>
#end

基础语法—if判断

在这里插入图片描述

## 定义成绩变量
#set($score = 80)

## 判断成绩
#if($score >= 90)
    优秀
#elseif($score >= 80)
    良好
#elseif($score >= 70)
    中等
#else
    不及格
#end

条件判断中,velocity支持常见的关系操作符, 比如: &&, || , !

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2070827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录|C# winform——Chart控件

目录 前言一、重点关注1.1 Chart控件效果1.2 属性1.2.0 位置讲解1.2.1 Titles——标题集合TextToolTip 1.2 .2 Series——图表序列ChartTypeLegends——图例集合 二、数据传入Chart控件2.1 如何传入数据&#xff1f;2.2 如果想限定每次展现的数据量怎么办&#xff1f; 三、标注…

主机安全-网络攻击监测

目录 概述暴力破解&#xff08;SSH爆破为例&#xff09;原理规则攻击模拟告警 端口扫描原理规则攻击模拟告警 流量劫持原理规则攻击模拟告警 参考 概述 本文介绍主机网络层面上的攻击场景&#xff0c;每种攻击场景举一个例子。监测方面以字节跳动的开源HIDS elkeid举例。 针对…

【2】搭建雅特力AT32F437ZMT OpenHarmony轻量系统开发环境

本文用于阐述如何搭建AT32F437ZMT OpenHarmony轻量系统开发环境开源组织地址&#xff1a;https://gitee.com/AT32437_OpenHarmony 1.AT-START-F437雅特力官方开发板相关资料 移植基于at32f437雅特力官方开发板AT-START-F437 AT-START-F437雅特力官方开发板相关资料 2.AT32F43…

采用不高于3次的勒让德多项式拟合原函数

利用勒让德多项式进行拟合的区域是[-1,1]&#xff0c;如果不是这个区域&#xff0c;比如是[a,b]&#xff0c;利用转化到[-1,1]。 参考以下例题计算系数 C语言代码如下 //用三阶的勒让德多项式进行拟合 #include<math.h> #include<stdio.h> #include "main.c…

智能控制,高效节能。ZLG致远电子能源智慧管理解决方案

面对楼宇及建筑群能源管理与设备控制的复杂需求&#xff0c;ZLG致远电子推出了一套能源智慧管理解决方案。该方案集设备管理、任务调度和数据可视化于一体&#xff0c;不仅实现数据的实时监控与分析&#xff0c;还助力系统节能降耗。 ZLG致远电子能源智慧管理解决方案 在ZLG致…

shallowReactive 与 shallowRef

除了之前的 ref与reactive 之外&#xff0c;Vue3 还准备了另外两个API&#xff0c;也是用来对响应式数据做处理&#xff0c;那就是 shallowReactive 与 shallowRef shallowReactive 文档解释&#xff1a;reactive() 的浅层作用形式&#xff0c;只能定义对象类型的数据。和 r…

pytorh基础知识和函数的学习:图像文件的Tensor

在深度学习和计算机视觉中&#xff0c;将图像文件转换为张量&#xff08;Tensor&#xff09;是数据预处理的重要步骤。Tensor 是一种多维数组&#xff0c;在 PyTorch 中&#xff0c;用于表示和处理数据。 首先&#xff0c;创建一个3*3的图像文件&#xff0c;放大之后&#xff…

终端防火墙软件功能 | 在终端设备上启用防火墙!终端安全小课堂开讲啦

终端设备的安全性直接关系到企业的整体网络安全&#xff0c;随着网络威胁的日益复杂和多样化&#xff0c;启用并合理配置终端防火墙软件是保障终端安全不可或缺的一环。 今天&#xff0c;我们将走进终端安全小课堂&#xff0c;详细解析安企神终端安全管理软件中的防火墙功能&a…

unity Android + WebGL 浏览器打开

1.切换为WebGL平台 2.打包的时候设置 3.放入FHS 手机打开这个链接即可 注意这是在局域网内

c++11异常

一、异常介绍 1、异常作用 异常是一种处理错误的方式&#xff0c;当一个函数发现自己无法处理的错误时就可以抛出异常&#xff0c;让函数的 直接或间接的调用者处理这个错误 2、异常操作 &#xff08;1&#xff09;throw 当问题出现时&#xff0c;程序会抛出一个异常。这是…

darnet 识别检测本地视频 保存本地视频

darnet 识别检测本地视频 保存本地视频 darknet的github下载 darknet的github下载 darknet地址 将这个下载后&#xff0c;保存在catkin_ws的src目录下

C语言 ——— 柔性数组

目录 柔性数组的概念以及定义 柔性数组的特点 柔性数组的使用 柔性数组的概念以及定义 概念&#xff1a; C99中&#xff0c;结构中的最后一个元素允许是未知大小的数组&#xff0c;这就叫柔性数组成员 定义&#xff1a; struct st_type {int i;int a[0]; //柔性数组成员…

rpmbuild构建mysql-boost-5.7.42版本的rpm包

系列文章目录 rpmbuild入门 文章目录 系列文章目录前言一、准备工作1、mysql-5.7.42源码包下载2、准备mycnf配置文件3、mysqld.server配置文件准备4、检查服务器的cmake版本和gcc版本5、服务器安装依赖 二、编译构建0、rpmbuild目录树示例1、spec文件拆分解释2、源码包解压部分…

秋招力扣Hot100刷题总结——堆

1. 数组中的第K个最大元素 题目链接 题目要求&#xff1a;给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) …

使用Jupyter Notebook实现Python编程

目录 1. 安装Anaconda 2. 启动Jupyter Notebook 3. 调试Python代码: 4. 定义一个简单的python类 ​5. 在控制台运行代码,并从命令行接受参数 6. 调用其他py文件中的类 ​7. conda环境切换和迁移 1. 安装Anaconda 到Anaconda官网下载安装包:Download Anaconda Distri…

Android - lock/unlock bootloader

在执行 adb remount 时高版本经常会提示失败 此时就需要对设备的进行解锁操作。记录两个部分&#xff0c;Google解锁和展锐解锁。 目录 一、Google解锁 二、展锐解锁 三、补充跳过按键检测的方案 一、Google解锁 官网介绍的unlock方法如下&#xff1a;锁定/解锁引导加载程序…

并发编程与并发安全

持续更新中 模块序号目录链接前言介绍1前言地址2介绍地址基础知识3计算机网络地址4操作系统地址5Java基础地址6Java并发地址7Java虚拟机地址中间件8Mysql地址9Redis地址10Elasticsearch地址11RabbitMQ地址12RocketMQ地址框架13分布式系统地址14MyBatis地址15Dubbo地址16Spring地…

Java面试题--JVM大厂篇之JVM 大厂面试题及答案解析(3)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到我的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而我的博客&…

如何使用ssm实现基于HTML5的出租车管理系统

TOC ssm126基于HTML5的出租车管理系统jsp 绪论 1.1 选题背景 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。计算机软件可以针对不同行业的营业特点以…

【数据结构5】二叉搜索树(插入、查询、删除)

1 二叉搜索树 1.1 二叉搜索树-插入 1.2 二叉搜索树-查询 1.3 二叉搜索树-删除 1 二叉搜索树 二叉搜索树是一颗二叉树且满足性质:设是二叉树的一个节点。 如果y是x左子树的一个节点&#xff0c;那么y.key< x.key;如果y是x右子树的一个节点&#xff0c;那么y.key > x.key。…