偶用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>