关闭

freemark标签的使用案例

标签: FreeMarker
138人阅读 评论(0) 收藏 举报

这样会遇到一个问题,当数据超过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  
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:43120次
    • 积分:709
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:52篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论