偶用Freemarker做模本語言有一段時間了,列出幾個和JSP或者Velocity相比起來比較方便的用途,目的是引誘更多的人跳上Freemarker這個賊船,:evil:
1. String內置的JavaScript轉換: js_string
用途:用於JavaScript轉義,轉換',",換行等特殊字符
模板:
<script>
alert("${errorMessage?js_string}");
</script>
輸出:
<script>
alert("Readonly/'s pet name is /"Cross Bone/"");
</script>
2.內置的默認值處理:default
用途: 用於處理默認值
模本:
User: ${userLogin.name?default("Anonymous")}
<td>${(employee.department.manager.name)?default(" ")}</td>
輸出:
User: Anonymous
<td> </td>
注,可以對整個對象樹加上(),再用內置處理器這種方便的做法,偶也是最近剛學會的,以前一直用很傻的方法做.....
3. Sequence內置的計數器: xxx_index
用途:顯示序號
模板:
<#list employees as e>
${e_index}. ${e.name}
</#list>
輸出:
1. Readonly
2. Robbin
4. Sequence內置的分段器: chunk
用途:某些比較BT的排版需求
模板:
<#assign seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']>
<#list seq?chunk(4) as row>
<ul>
<li><#list row as cell>${cell} </#list></li>
</ul>
</#list>
<#list seq?chunk(4, '-') as row>
<tr>
<td><#list row as cell>${cell} </#list></td>
</tr>
</#list>
輸出:
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
</ul>
<ul>
<li>e</li>
<li>f</li>
<li>g</li>
<li>h</li>
</ul>
<ul>
<li>i</li>
<li>j</li>
</ul>
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
<td>d</td>
</tr>
<tr>
<td>e</td>
<td>f</td>
<td>g</td>
<td>h</td>
</tr>
<tr>
<td>i</td>
<td>j</td>
<td>-</td>
<td>-</td>
</tr>