论坛首页 Java企业应用论坛

Freemarker - 几个比较实用的例子

浏览 45876 次
该帖已经被评为精华帖
作者 正文
   发表时间:2005-09-14  
偶用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>



5. 等待你补充更多的例子......
   发表时间:2005-09-14  
极度憎恨这些模板语言,性能杀手呀。
0 请登录后投票
   发表时间:2005-09-14  
支持,不过你写的也太少了点哦
1 请登录后投票
   发表时间:2005-09-14  
shanghai 写道
极度憎恨这些模板语言,性能杀手呀。


哦,我喜欢Template~~
0 请登录后投票
   发表时间:2005-09-14  
shanghai 写道
极度憎恨这些模板语言,性能杀手呀。

模板语言是性能杀手?这个结论怎么得出的?

当然,如果要用纯静态生成来比,那是没的比,但这种技术适用的范围并不是很大
0 请登录后投票
   发表时间:2005-09-14  
为什么模板语言是性能杀手?什么样的页面才不是性能杀手?

Freemarker真的很强大,我喜欢,不过readonly提的这些似乎还不够典型啊,至少这些JSTL都可以做到,而且有的写法比Freemarker优雅
0 请登录后投票
   发表时间:2005-09-14  
别的模版语言不清楚,但是FreeMarker性能可并不差。
2 请登录后投票
   发表时间:2005-09-14  
downpour 写道
Freemarker真的很强大,我喜欢,不过readonly提的这些似乎还不够典型啊,至少这些JSTL都可以做到,而且有的写法比Freemarker优雅

JSTL不了解, 偶的印象就是标准化的Tag Lib,举个上面对应的优雅例子看看?
0 请登录后投票
   发表时间:2005-09-15  
文章不错,但是不喜欢 代码中出现 " $,#"这样的符号,有点像 PHP 

和 ognl比哪个方便一点?
0 请登录后投票
   发表时间:2005-09-15  
jstl在语法形式上应该优于FreeMarker。

在我们的tpl模板语言中,
1. JavaScript转换
<script> alert('${escape(errorMessage)}');</script>

2. 默认值处理
<td>${nvl(employee.department.manager.name,' ')}</td>

3. 循环指标
<c:forEach var="e" items="${employees}" varStatus="vt">
${vt.index} . ${e.name}
</c:forEach>


4. chunk
<c:set var="seq" values="${toList('a','b','c','d','e','f','g','h','i','j']}" />
<c:forEach var="row" items="${chunk(seq,4)}" >
<ul>
<li><c:forEach var="cell" items="${row}">${cell}</c:forEach>
</ul>
</c:forEach>
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics