热门标签 | 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官方文档


推荐阅读
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
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社区 版权所有