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

freemarker基本指令用法

freemarker基本指令用法1、if指令第一种用法[#if条件][#if]第二种用法[#if条件][#else][#if]第三种用法[#if条件

freemarker基本指令用法

1、if指令

//第一种用法
[#if 条件]
...
[/#if]
//第二种用法[#if 条件]...[#else]...
[/#if]//第三种用法[#if 条件]...[#elseif 条件]...[#else]...
[/#if]

2、list指令

//第一种用法
[#list animals as animal] ...
[/#list]//第二种用法
[#list animals] //如果集合为空则不进list...[#items as animal] //循环体...[/#items]
[/#list]//第三种用法
[#list animals as animal] $ {animal}[#sep]//表示还有下一个实体时,执行显示,号,[/#sep]
[/#list]
//第四种用法
[#list animals as animal]${animal}[#sep],[/#sep][#else]//如果list元素为空则执行elseNone
[/#list]//第五种用法
[#list animals ]...[#items as animal]${animal}[#sep] ...[/#sep][/#items]
[#else]
...
[/#list]

3、include指令
使用该include指令,您可以将另一个文件的内容插入到模板中。

[#include "/copyright_footer.html"]

4、使用内置插件
FreeMarker使用?启动调用内置插件

${user?upper_case} //字符串大写${user?cap_first} //首字母大写${user?length} //字符串长度${animal.protected?string("Y", "N")} //返回字符串“Y”或“N”,具体取决于布尔值animal.protected${user?starts_with("J")} //第一个字母是否是J${1.1?int} //取整//list 相关用法${animals?size} //list大小${fruits?join(", ")} //通过连接项目,并在每个项目之间插入参数分隔符(如“orange,banana”)将列表转换为字符串[#list animals as animal]${animal?index} //索引0开始${animal?counter} //索引1开始${animal?item_parity} //根据当前的计数器奇偶校验,给出字符串“奇数”或“偶数”。这通常用于着色具有交替颜色的行[/#list]

内置插件是可以连接一起使用,例如:
${fruits?join(", ")?upper_case}
${1.1?int} //取整
5、处理缺失的变量
所谓缺失值的意思是:在FreeMarker的模型中不存在的变量,处理方式有两种:


  • 设置默认值,关键符 !

${user! "visitor" } //如果user变量不存在则值就是visitor,否则就是${user}

备注:如果给一个对象的某个属性设置默认值应该 ${(user.name)!""},如果不加括号,那么如果user也是缺失值,那么FreeMarker会报错。


  • 使用if判断是否是缺失变量,关键符号两个文号 ??

[#if user??]//user变量存在
[/#if]

6、“. .”操作符
“…”用来表示一个范围,通常用于截取字符串和序列

start..end 包含开始和结束。例:0..5 相当于[0,5]
start..<end 和 start..!end 包含开始但不包含结束。例&#xff1a; 0..<5 相当于[0,)
start..*length 长度限制范围。例&#xff1a; 1..*5 相当于 1 2 3 4 5
start.. 右无界范围。这就像长度有限的范围&#xff0c;长度无限。例如&#xff0c;1.. 相当于 [1, 2, 3, 4, 5, 6, ... ]无限

“. .”操作符并不真正存储它们所包含的数字&#xff0c;因此例如0. .1并且 0. .100000000速度相同&#xff0c;占用的内存也相同。
该操作符可用于字符串操作和序列操作。例如&#xff1a;


  • 字符串操作

//比如name&#61;“freemarker”
${name[0..5]} //freema 截取前6个字符
${name[0..<5]} //freem 截取前5个字符
${name[0..*5]} //freem 截取前5个字符
${name[5..]} //arker 截取第6个字符及以后的字符

  • 序列操作

[#list animals[0..5] as animal] ${animal.name} [/#list] //只循环前序列的前6个对象
[#list animals[0..<5] as animal] ${animal.name} [/#list] //只循环前序列的前5个对象
[#list animals[0..*5] as animal] ${animal.name} [/#list] //只循环前序列的前5个对象
[#list animals[5..] as animal] ${animal.name} [/#list] //只循环前序列的第6个及以后的对象
[#list animals[10..5] as animal] ${animal.name} [/#list] //循环下标为10到5的倒序&#xff0c;这种方法可以让序列倒序
[#list 0..10 as num] ${num} [/#list] //0~10的循环

7、r转义
如果你想直接在页面上显示“${name}”字符串就得使用r进行转义。例如

${r"${name}"} //直接输出${name}

8、assign关键字
assign用于自定义变量
例如&#xff1a;


  • 定义一个字符串变量

[#assign name&#61;"freemarker"] //定义一个字符串
[#assign name&#61;"Hello ${user} !"]
[#assign name&#61;"free" &#43; “marker”] //两个字符串拼接

  • 定义一个序列

<#assign seq1 &#61; ["abc"&#xff0c;"bcd"&#xff0c;"cde"]> //定义一个序列
<#assign seq2 &#61; seq1 &#43; ["efg"]> //两个序列拼接
<#assign seq3 &#61; ["a"&#xff0c;["b","c"]&#xff0c;"d"]> //可以序列中可以包含任意类型

  • 定义一个Hash

<#assign ages &#61; {"Joe"&#xff1a;23&#xff0c;"Fred"”&#xff1a;25}>
<#assign ages &#61; {"Joe"&#xff1a;23&#xff0c;"Fred"&#xff1a;25} &#43; {"Joe"&#xff1a;30&#xff0c;"Fred"&#xff1a;18}>

  • 定义一个number变量

<#assign num &#61; 25>
<#assign num &#61; 25 &#43; 10 * 12> //可以进行各种算数运算

更多用法参考&#xff1a;FreeMarker官方文档


推荐阅读
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
author-avatar
HS_G_960
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有