热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

velocity语法小结

文章目录1.注释2.定义变量3.条件语句4.循环标签5.Velocity中的宏6.debug语法标签7.不存在的变量显示为空白8.本地文件引入9.调用类方法1.注释单行注释:#


文章目录

  • 1. 注释
  • 2. 定义变量
  • 3. 条件语句
  • 4. 循环标签
  • 5. Velocity 中的宏
  • 6. debug语法标签
  • 7. 不存在的变量显示为空白
  • 8. 本地文件引入
  • 9. 调用类方法


1. 注释

单行注释 :

## 内容

多行注释:

#* 内容 *#

文档注释:

#**内容*#

2. 定义变量

可以使用#set 来定义变量 ,举个例子:

① 模板内容:

#set($word="zhuoqianmingyue")
${word}#$word
#set($surname="Lee")
#set($name="junkui")
#set($fullname="$surname $name")
${fullname}

② 单元测试方法:

public void set() {String templatePath = "cn/lijunkui/api/set.vm";String htmlPath = "D:\\set.html";test(templatePath,htmlPath);
}

③ 测试类

private void test(String templatePath, String htmlPath) {VelocityEngine ve=new VelocityEngine();//设置模板加载路径,这里设置的是class下 ve.setProperty(Velocity.RESOURCE_LOADER, "class");ve.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");try { //进行初始化操作 ve.init(); //加载模板,设定模板编码Template t=ve.getTemplate(templatePath,"utf-8");//设置初始化数据 VelocityContext context = new VelocityContext(); //设置输出 PrintWriter writer = new PrintWriter(htmlPath); //将环境数据转化输出 t.merge(context, writer); writer.close(); } catch (Exception e) { e.printStackTrace(); }
}

3. 条件语句

语法:

#if #elseif #else #end

下面为模板内容示例:

#set($number = 1)#if($number == 1)这个数是 1
#elseif($number == 2)这个数是 2
#else这个数是3
#end

4. 循环标签

循环标签可以使用#foreach

举例:

#foreach ( $item in [1..5] )$item
#end-------------------------------#set ( $arr = [0..1] )
#foreach ( $x in $arr )$x
#end
-------------------------------
#set ( $arr2 = [0..1] )
#set ( $k = 1 )
#foreach ( $x in $arr2 )x:$x,k: $k
#set($k = $k+1)
#end
-------------------------------

5. Velocity 中的宏

举例:

#macro(html)<h2>这是一个宏</h2>
#end
#macro(htmlContent $content)<h2>$content</h2>
#end
#html()
#htmlContent("有参数的宏")

6. debug语法标签

debug语法标签可以使用#stop&#xff0c;举例&#xff1a;

stop前的内容
#stop
stop后的内容

7. 不存在的变量显示为空白

为了把不存在的变量或变量值为null的对象$msg显示为空白&#xff0c;则只需要在变量名前加一个“!”号即可&#xff0c;举例&#xff1a;

#set($word&#61;"zhuoqianmingyue")
存在的内容&#xff1a;${word}#
不存在的内容&#xff1a;${word1}
不存在的内容不显示&#xff1a;$!{word1}
<br>---------------------------<br>
#if($!{word1})存在#else不存在
#end

8. 本地文件引入


  • #include : 可以引入多个文件&#xff0c;被引入文件的内容将不会通过模板引擎解析
  • #parse&#xff1a; 只能引入单个文件&#xff0c;引入的文件内容Velocity将解析其中的velocity语法并移交给模板

举例&#xff1a;

#include( "abc.txt","cde.txt" )

#parse("parent.vm")

9. 调用类方法

举例&#xff1a;

① 定义一个String工具类 将小写内容转换为大写&#xff1a;

package cn.lijunkui.api;public class StringUtils {public static String toUpper(String word) {return word.toUpperCase();}
}

② 编写模板引擎初始化并将工具类的实例对象加载进模板的上下文中&#xff1a;

public void initWihtFun(String templatePath, String htmlPath) {VelocityEngine ve&#61;new VelocityEngine();//设置模板加载路径&#xff0c;这里设置的是class下 ve.setProperty(Velocity.RESOURCE_LOADER, "class");ve.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");ve.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, "D:\\workspace-sts-3.9.5.RELEASE\\velocitylearn\\target\\velocitylearn\\WEB-INF\\classes\\cn\\lijunkui\\api"); try { //进行初始化操作 ve.init(); //加载模板&#xff0c;设定模板编码Template t&#61;ve.getTemplate(templatePath,"utf-8");//设置初始化数据 VelocityContext context &#61; new VelocityContext(); StringUtils stringUtils &#61; new StringUtils();context.put("stringUtils", stringUtils);//设置输出 PrintWriter writer &#61; new PrintWriter(htmlPath); //将环境数据转化输出 t.merge(context, writer); writer.close(); } catch (Exception e) { e.printStackTrace(); }
}

③ 编写模板内容&#xff1a;

#set($word&#61;"zhuoqianmingyue")
$stringUtils.toUpper("abc")
$stringUtils.toUpper(${word})

④ 测试用例&#xff1a;

public void useFun() {String templatePath &#61; "cn/lijunkui/api/useFun.vm";String htmlPath &#61; "D:\\useFun.html";initWihtFun(templatePath,htmlPath);
}

推荐阅读
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
author-avatar
mobiledu2502861323
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有