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. <#assignfoo=true/>
  13. $...{foo?string("yes","no")}<#--yes-->
  14. 二、内置方法
  15. 1、数字型
  16. <#assignanswer=42/>
  17. $...{answer}
  18. $...{answer?string}<#--thesameas$...{answer}-->
  19. $...{answer?string.number}
  20. $...{answer?string.currency}
  21. $...{answer?string.percent}
  22. <#settingnumber_format="0.###E0"/>
  23. $...{12345?string("0.####E0")}
  24. $...{answer?string("number")}等同于:$...{answer?string.number}.
  25. 2、日期型:
  26. 预定义格式包括:short,middle和long。
  27. $...{openingTime?string.short}
  28. $...{openingTime?string.medium}
  29. $...{openingTime?string.long}
  30. 组合使用:$...{lastUpdated?string.short_long}
  31. $...{lastUpdated?string("yyyy-MM-ddHH:mm:sszzzz")}
  32. 3、逻辑型
  33. foo?string
  34. foo?string("yes","no")
  35. 4、序列的内置方法:
  36. first
  37. last
  38. seq_contains
  39. $...{x?seq_contains("blue")?string("yes","no")}
  40. seq_index_of
  41. seq_last_index_of
  42. reverse
  43. size
  44. sort
  45. sort_by
  46. 多层次的hash排序
  47. <#assignmembers=[
  48. ...{"name":...{"first":"Joe","last":"Smith"},"age":40},
  49. ...{"name":...{"first":"Fred","last":"Crooger"},"age":35},
  50. ...{"name":...{"first":"Amanda","last":"Fox"},"age":25}]>
  51. Sortedbyname.last:
  52. <#listmembers?sort_by(['name','last'])asm>
  53. -$...{m.name.last},$...{m.name.first}:$...{m.age}yearsold
  54. </#list>
  55. chunk:将一个序列分解成几个序列。
  56. <#assignseq=['a','b','c','d','e','f','g','h','i','j']>
  57. <#listseq?chunk(4)asrow>
  58. <#listrowascell>$...{cell}</#list>
  59. </#list>
  60. <#listseq?chunk(4,'-')asrow>
  61. <#listrowascell>$...{cell}</#list>
  62. </#list>
  63. chunk经常用于分栏或者表格输出的格式。
  64. 5、hash内置方法:
  65. keys:
  66. values:
  67. 三、序列
  68. 由逗号分隔的变量列表,由方括号限定,类似java中的一维数组
  69. <#assignseq=["winter","spring","summer","autumn"]>
  70. <#listseqasx>
  71. ${x_index+1}.${x}
  72. <#ifx_has_next>,
  73. </#list>
  74. 输出
  75. 1.winter,
  76. 2.spring,
  77. 3.summer,
  78. 4.autumn
  79. 四、Hashes(散列)
  80. 由逗号分隔的键-值列表,由大括号限定,键和值之间用冒号分隔:{"name":"greenmouse","price":150},键和值都是表达式,但是键必须是字符串。
  81. <#assignages=...{"Joe":23,"Fred":25}+...{"Joe":30,"Julia":18}>
  82. Joeis$...{ages.Joe}
  83. Fredis$...{ages.Fred}
  84. Juliais$...{ages.Julia}
  85. 结果:
  86. -Joeis30
  87. -Fredis25
  88. -Juliais18
  89. 五、freemarker的空值和默认值
  90. ${user?if_exists}
  91. ${user?default('yourname')}
  92. 判断对象是不是null
  93. <#ifmouse?exists>
  94. Mousefound
  95. <#else>
  96. <#ifbook.name??>
  97. Mousefound
  98. </#if>
  99. list空值判断<#ifbookList?size=0>
  100. 六、算术运算
  101. 比较操作符-<#ifexpression>...</#if>
  102. 1.)使用=(或==,完全相等)测试两个值是否相等,使用!=测试两个值是否不相等
  103. 2.)=和!=两边必须是相同类型的值,否则会产生错误,例如<#if1="1">会引起错误
  104. 3.)Freemarker是精确比较,所以"x"、"x"和"X"是不相等的
  105. 4.)对数字和日期可以使用<<=、>>=,但不能用于字符串
  106. 5.)由于Freemarker会将>解释成FTL标记的结束字符,所以对于>>=可以使用括号来避免这种情况,例如<#if(x>y)>,另一种替代的方法是,使用lt、lte、gt和gte来替代<<=、>>=
  107. 逻辑操作符-&&(and)、||(or)、!(not),只能用于布尔值,否则会产生错误
  108. <#ifx<12&&color="green">
  109. Wehavelessthan12things,andtheyaregreen.
  110. </#if>
  111. <#if!hot><#--herehotmustbeaboolean-->
  112. It'snothot.
  113. </#if>
  114. 内置函数-用法类似访问hash(散列)的子变量,只是使用"?"替代".",例如:user?upper_case
  115. 下面列出常用的一些函数:
  116. 对于字符串
  117. html-对字符串进行HTML编码
  118. cap_first-使字符串第一个字母大写
  119. lower_case-将字符串转换成小写
  120. trim-去掉字符串前后的空白字符
  121. 对于Sequences(序列)
  122. size-获得序列中元素的数目
  123. 对于数字
  124. int-取得数字的整数部分(如-1.9?int的结果是-1)
  125. 例一:
  126. <#--test的值为Tom&Jerry-->
  127. $...{test?html}
  128. $...{test?upper_case?html}
  129. 结果:
  130. Tom&Jerry
  131. TOM&JERRY
  132. 例二:
  133. <#--seasons的值为"winter","spring","summer","autumn"-->
  134. $...{seasons?size}
  135. $...{seasons[1]?cap_first}<#--leftsidecanbyanyexpression-->
  136. $...{"horse"?cap_first}
  137. 结果:
  138. 4
  139. Spring
  140. Horse
  141. 方法的调用
  142. $...{repeat("What",3)}
  143. $...{repeat(repeat("x",2),3)+repeat("What",4)?upper_case}
  144. 结果:
  145. WhatWhatWhat
  146. xxxxxxWHATWHATWHATWHAT
  147. 操作符优先顺序
  148. 后缀[subvarName][subStringRange].(methodParams)
  149. 一元+expr、-expr、!
  150. 内建?
  151. 乘法*、/、%
  152. 加法+、-
  153. 关系<><=、>=(lt、lte、gt、gte)
  154. 相等=、!=
  155. 逻辑&&
  156. 逻辑||
  157. 数字范围..
  158. 三.)Interpolation:由$...{...}或#...{...}两种类型,输出计算值,可以定义输出的格式
  159. 例一:
  160. <#settingnumber_format="currency"/>
  161. <#assignanswer=42/>
  162. $...{answer}
  163. $...{answer?string}<#--thesameas$...{answer}-->
  164. $...{answer?string.number}
  165. $...{answer?string.currency}
  166. $...{answer?string.percent}
  167. 结果:
  168. $42.00
  169. $42.00
  170. 42
  171. $42.00
  172. 4,200%
  173. 例二:
  174. $...{lastUpdated?string("yyyy-MM-ddHH:mm:sszzzz")}
  175. $...{lastUpdated?string("EEE,MMMd,''yy")}
  176. $...{lastUpdated?string("EEEE,MMMMdd,yyyy,hh:mm:ssa'('zzz')'")}
  177. 结果:
  178. 2003-04-0821:24:44PacificDaylightTime
  179. Tue,Apr8,'03
  180. Tuesday,April08,2003,09:24:44PM(PDT)
  181. 例三:
  182. <#assignfoo=true/>
  183. $...{foo?string("yes","no")}
  184. 结果:
  185. yes
  186. 例四:
  187. <#--xis2.582andyis4-->
  188. #...{x;M2}<#--2.58-->
  189. #...{y;M2}<#--4-->
  190. #...{x;m1}<#--2.6-->
  191. #...{y;m1}<#--4.0-->
  192. #...{x;m1M2}<#--2.58-->
  193. #...{y;m1M2}<#--4.0-->
  194. 说明:mX-小数部分最小X位;MX-小数部分最大X位。
  195. 四.)注释:<#--和-->
  196. 下面是一个常用的模板例子:
  197. <p>Wehavetheseanimals:
  198. <tableborder=1>
  199. <tr><th>Name<th>Price
  200. <#listanimalsasbeing>
  201. <tr>
  202. <td>
  203. <#ifbeing.size="large"><b></#if>
  204. $...{being.name}
  205. <#ifbeing.size="large"></b></#if>
  206. <td>$...{being.price}Euros
  207. </#list>
  208. </table>
  209. <#include"/copyright_footer.html">
  210. 注意点:
  211. 1.)FreeMarker是区分大小写的;
  212. 2.)FTL标记不能位于另一个FTL标记内部,例如:<#if<#include'foo'>='bar'>...</if>
  213. 3.)$...{…}只能在文本中使用;
  214. 4.)多余的空白字符会在模板输出时去除;
  215. 5.)如果使用的指令不存在,会产生一个错误消息。
  216. <#--x的值设定为5-->
  217. $...{x*x-100}
  218. $...{x/2}
  219. $...{12%10}
  220. 结果:
  221. -75
  222. 2.5
  223. 2
  224. 注意:操作符两边必须是数字;使用"+"时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串。
  225. 使用内建的指令int获得整数部分:
  226. $...{(x/2)?int}
  227. $...{1.1?int}
  228. $...{1.999?int}
  229. $...{-1.1?int}
  230. $...{-1.999?int}
  231. 结果:
  232. 2
  233. 1
  234. 1
  235. -1
  236. -1

你可能感兴趣的:(freemark)