freemark标签的使用案例

2023-12-06 11:49
文章标签 使用 案例 标签 freemark

本文主要是介绍freemark标签的使用案例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这样会遇到一个问题,当数据超过3位的时候,freemarker会自动用逗号截取 格式如:2,008

如何解决呢?

1> 加.toString(),如:${(userId).toString()}
2> 加?c,如:${(userId)?c}
3> freemarker配置文件freemarker.properties加上number_format=#

判断是否为空:

1.<#if xx[0]?exists>

2.<#if xx??>

3.<#if xx?default("xxx")>

不然当没有数据的时候 ,很大很大一个黄页就等着你了

序列号:

有时候页面的table需要在第一列显示序号  只需要使用 _index 即可  不过是从0开始的 你可以+1 比如:

<#list list as a>

${a_index+1}

</#list> 

数据类型转换:

${xx?string} //字符串
${xx?number}//整数
${xx?currency}//小数
${xx?percent}//百分比

截取字符串长度:

有的时候我们在页面中不需要显示那么长的字符串,比如新闻标题,这样用下面的列子就可以自定义显示的长度

< lt. <= lte. > gt. >= gte

<#if jstbqkVO.gzdd?length lt 8>
           <a href>${jstbqkVO.gzdd?default("")}</a>
      <#else>
           <a href title="${jstbqkVO.gzdd}">${jstbqkVO.gzdd[0..3]?default("")}...</a>
</#if>

意思就是如果这个字符串的长度小于8,那么就正常显示,反之则取4位

嵌套list:

很多时候,数据库里存储的都是编号,而页面上需要显示的汉字,而且不在一张表里,看列子

<#list jsskList as jsskVO>

<#list kcList as kcVO>
           <#if kcVO.kch=jsskVO.kch> (kcVO里有编号和名称,而jsskVO里只有编号)
                  ${kcVO.kcm} 
           </#if>
   </#list>

</#list>

排序:

1.升序.sort_by()

<#list list?sort_by("字段") as x>
</#list>

2.降序.sort_by()?reverse

<#list list?sort_by("字段")?reverse as x> 
</#list>

去空格:

${xx?trim}

格式化日期:

${date?string("yyyy-MM-dd HH:mm:ss ")}
${date?string("yyyyMMdd ")}


-------------------------------------------------------------------------------------------------------------------

  1. 一、常用语法   
  2.  EG.一个对象BOOK   
  3. 1、输出 $...{book.name}   
  4. 2、空值判断:$...{book.name?if_exists },   
  5.                        $...{book.name?default(‘xxx’)}//默认值xxx   
  6.                        $...{ book.name!"xxx"}//默认值xxx   
  7. 3、日期格式:$...{book.date?string('yyyy-MM-dd')}   
  8. 4、数字格式:$...{book?string.number}--20   
  9.                        $...{book?string.currency}--<#-- $20.00 -->  
  10.                        $...{book?string.percent}—<#-- 20% -->  
  11. 5、插入布尔值:   
  12.                        <#assign foo=true />  
  13.                        $...{foo?string("yes","no")} <#-- yes -->  
  14.   
  15. 二、内置方法   
  16. 1、数字型   
  17.                      <#assign answer=42/>  
  18.                         $...{answer}   
  19.                         $...{answer?string}  <#-- the same as $...{answer} -->  
  20.                         $...{answer?string.number}   
  21.                         $...{answer?string.currency}   
  22.                         $...{answer?string.percent}   
  23.   
  24.                         <#setting number_format="0.###E0"/>  
  25.   
  26.                         $...{12345?string("0.####E0")}     
  27.   
  28.   
  29.                         $...{answer?string("number")} 等同于:$...{answer?string.number}.   
  30.   
  31. 2、日期型:   
  32.          预定义格式包括:short ,middle和long。   
  33.                         $...{openingTime?string.short}   
  34.                         $...{openingTime?string.medium}   
  35.                         $...{openingTime?string.long}   
  36.          组合使用:$...{lastUpdated?string.short_long}   
  37.                         $...{lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}   
  38.   
  39. 3、逻辑型   
  40.                         foo?string   
  41.                         foo?string("yes", "no")   
  42. 4、序列的内置方法:   
  43.                         first   
  44.                         last   
  45.                         seq_contains   
  46.                         $...{x?seq_contains("blue")?string("yes", "no")}   
  47.                         seq_index_of   
  48.                         seq_last_index_of   
  49.                         reverse   
  50.                         size   
  51.                         sort   
  52.                         sort_by   
  53.              多层次的hash排序   
  54.                         <#assign members = [   
  55.                          ...{"name": ...{"first": "Joe", "last": "Smith"}, "age": 40},   
  56.                          ...{"name": ...{"first": "Fred", "last": "Crooger"}, "age": 35},   
  57.                         ...{"name": ...{"first": "Amanda", "last": "Fox"}, "age": 25}]>  
  58.                         Sorted by name.last:    
  59.                         <#list members?sort_by(['name', 'last']) as m>  
  60.                         - $...{m.name.last}, $...{m.name.first}: $...{m.age} years old   
  61.                         </#list>    
  62.   
  63.                         chunk:将一个序列分解成几个序列。   
  64.                         <#assign seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']>  
  65.                         <#list seq?chunk(4) as row>  
  66.                         <#list row as cell>$...{cell} </#list>  
  67.                         </#list>  
  68.                         <#list seq?chunk(4, '-') as row>  
  69.                         <#list row as cell>$...{cell} </#list>  
  70.                         </#list>  
  71.                         chunk经常用于分栏或者表格输出的格式。   
  72. 5、hash内置方法:   
  73.                         keys:   
  74.                         values:   
  75. 三、序列   
  76. 由逗号分隔的变量列表,由方括号限定,类似java中的一维数组   
  77.   
  78. <#assign seq = ["winter", "spring", "summer", "autumn"]>  
  79. <#list seq as x>  
  80.   ${x_index + 1}. ${x}   
  81.   
  82. <#if x_has_next>,   
  83.   
  84. </#list>  
  85.   
  86. 输出   
  87.   1. winter,   
  88.   2. spring,   
  89.   3. summer,   
  90.   4. autumn     
  91.   
  92. 四、Hashes(散列)   
  93.   
  94.     由逗号分隔的键-值列表,由大括号限定,键和值之间用冒号分隔:{"name":"green mouse", "price":150},键和值都是表达式,但是键必须是字符串。   
  95. <#assign ages = ...{"Joe":23, "Fred":25} + ...{"Joe":30, "Julia":18}>  
  96. Joe is $...{ages.Joe}   
  97. Fred is $...{ages.Fred}   
  98.  Julia is $...{ages.Julia}   
  99. 结果:   
  100. - Joe is 30   
  101. - Fred is 25   
  102. - Julia is 18   
  103. 五、freemarker的空值和默认值   
  104.   
  105. ${user?if_exists}         
  106.   
  107. ${user?default('your name')}   
  108.   
  109. 判断对象是不是null   
  110. <#if mouse?exists>  
  111.       Mouse found   
  112. <#else>  
  113.   
  114. <#if book.name?? >  
  115.   
  116.  Mouse found   
  117. </#if>  
  118. list 空值判断  <#if bookList?size = 0>  
  119.   
  120. 六、算术运算   
  121. 比较操作符-<#if expression>...</#if>  
  122. 1.)使用=(或==,完全相等)测试两个值是否相等,使用!= 测试两个值是否不相等   
  123. 2.)=和!=两边必须是相同类型的值,否则会产生错误,例如<#if 1 = "1">会引起错误   
  124. 3.)Freemarker是精确比较,所以"x"、"x  "和"X"是不相等的   
  125. 4.)对数字和日期可以使用<<=、>>=,但不能用于字符串   
  126. 5.)由于Freemarker会将>解释成FTL标记的结束字符,所以对于>>=可以使用括号来避免这种情况,例如<#if (x > y)>,另一种替代的方法是,使用lt、lte、gt和gte来替代<<=、>>=   
  127.   
  128. 逻辑操作符-&&(and)、||(or)、!(not),只能用于布尔值,否则会产生错误   
  129. <#if x < 12 && color = "green">  
  130.   We have less than 12 things, and they are green.   
  131. </#if>  
  132. <#if !hot> <#-- here hot must be a boolean -->  
  133.   It's not hot.   
  134. </#if>     
  135.   
  136. 内置函数-用法类似访问hash(散列)的子变量,只是使用"?"替代".",例如:user?upper_case   
  137. 下面列出常用的一些函数:   
  138. 对于字符串   
  139. html-对字符串进行HTML编码   
  140. cap_first-使字符串第一个字母大写   
  141. lower_case-将字符串转换成小写   
  142. trim-去掉字符串前后的空白字符   
  143. 对于Sequences(序列)   
  144. size-获得序列中元素的数目   
  145. 对于数字   
  146. int-取得数字的整数部分(如-1.9?int的结果是-1)   
  147.   
  148. 例一:   
  149.   
  150. <#-- test的值为Tom & Jerry -->  
  151.   $...{test?html}   
  152.   $...{test?upper_case?html}   
  153. 结果:   
  154. Tom & Jerry   
  155. TOM & JERRY    
  156.   
  157. 例二:   
  158.   
  159. <#-- seasons的值为"winter", "spring", "summer", "autumn" -->    
  160. $...{seasons?size}   
  161. $...{seasons[1]?cap_first} <#-- left side can by any expression -->  
  162. $...{"horse"?cap_first}     
  163. 结果:   
  164. 4   
  165. Spring   
  166. Horse     
  167.   
  168. 方法的调用   
  169. $...{repeat("What", 3)}    
  170. $...{repeat(repeat("x", 2), 3) + repeat("What", 4)?upper_case}    
  171. 结果:   
  172. WhatWhatWhat   
  173. xxxxxxWHATWHATWHATWHAT    
  174.   
  175. 操作符优先顺序   
  176. 后缀            [subvarName] [subStringRange] . (methodParams)   
  177. 一元            +expr、-expr、!   
  178. 内建            ?   
  179. 乘法            *、 / 、%   
  180. 加法            +、-   
  181. 关系            <><=、>=(lt、lte、gt、gte)   
  182. 相等            =、!=   
  183. 逻辑            &&   
  184. 逻辑            ||   
  185. 数字范围      ..   
  186.   
  187. 三.) Interpolation:由$...{...}或#...{...}两种类型,输出计算值,可以定义输出的格式   
  188. 例一:   
  189.   
  190. <#setting number_format="currency"/>  
  191. <#assign answer=42/>  
  192. $...{answer}   
  193. $...{answer?string}  <#-- the same as $...{answer} -->  
  194. $...{answer?string.number}   
  195. $...{answer?string.currency}   
  196. $...{answer?string.percent}    
  197. 结果:   
  198. $42.00   
  199. $42.00   
  200. 42   
  201. $42.00   
  202. 4,200%   
  203.   
  204. 例二:   
  205.   
  206. $...{lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}   
  207. $...{lastUpdated?string("EEE, MMM d, ''yy")}   
  208. $...{lastUpdated?string("EEEE, MMMM dd, yyyy, hh:mm:ss a '('zzz')'")}     
  209. 结果:   
  210. 2003-04-08 21:24:44 Pacific Daylight Time   
  211. Tue, Apr 8, '03   
  212. Tuesday, April 08, 2003, 09:24:44 PM (PDT)   
  213.   
  214. 例三:   
  215.   
  216. <#assign foo=true/>  
  217. $...{foo?string("yes", "no")}   
  218. 结果:   
  219. yes   
  220.   
  221. 例四:   
  222.   
  223. <#-- x is 2.582 and y is 4 -->  
  224. #...{x; M2}   <#-- 2.58 -->  
  225. #...{y; M2}   <#-- 4    -->  
  226. #...{x; m1}   <#-- 2.6 -->  
  227. #...{y; m1}   <#-- 4.0 -->  
  228. #...{x; m1M2} <#-- 2.58 -->  
  229. #...{y; m1M2} <#-- 4.0  -->     
  230. 说明:mX-小数部分最小X位;MX-小数部分最大X位。   
  231.   
  232. 四.) 注释:<#--和-->    
  233.   
  234. 下面是一个常用的模板例子:   
  235.   
  236. <p>We have these animals:   
  237. <table border=1>  
  238.   <tr><th>Name<th>Price   
  239.   <#list animals as being>  
  240.   <tr>  
  241.     <td>  
  242.       <#if being.size = "large"><b></#if>  
  243.       $...{being.name}   
  244.       <#if being.size="large"></b></#if>  
  245.     <td>$...{being.price} Euros   
  246.   </#list>  
  247.  </table>    
  248. <#include "/copyright_footer.html">  
  249. 注意点:   
  250. 1.) FreeMarker是区分大小写的;   
  251. 2.) FTL标记不能位于另一个FTL标记内部,例如:<#if <#include 'foo'>='bar'>...</if>;   
  252. 3.) $...{…}只能在文本中使用;   
  253. 4.) 多余的空白字符会在模板输出时去除;   
  254. 5.) 如果使用的指令不存在,会产生一个错误消息。   
  255. <#-- x的值设定为5 -->  
  256. $...{x * x - 100}   
  257. $...{x / 2}   
  258. $...{12 % 10}   
  259. 结果:   
  260. -75   
  261. 2.5   
  262. 2    
  263.   
  264. 注意: 操作符两边必须是数字;使用"+"时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串。   
  265. 使用内建的指令int获得整数部分:   
  266. $...{(x/2)?int}   
  267. $...{1.1?int}   
  268. $...{1.999?int}   
  269. $...{-1.1?int}   
  270. $...{-1.999?int}   
  271. 结果:   
  272. 2   
  273. 1   
  274. 1   
  275. -1   
  276. -1  

这篇关于freemark标签的使用案例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/461730

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma