Java 模板引擎,FreeMarker 2.3.23 RC1 发布

nm42 9年前

Java 模板引擎,FreeMarker 2.3.23 RC1 发布

FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写

FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序

虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图)

Java 模板引擎,FreeMarker 2.3.23 RC1 发布

FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件

FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境

FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库

FreeMarker是免费的

而且你还可以通过Eclipse的插件来编辑FreeMarker,经过验证,FreeMarker 最好的 Eclipse 编辑插件是 JBoss Tools。

FreeMarker特性

1、通用目标

能够生成各种文本:HTMLXMLRTFJava源代码等等

易于嵌入到你的产品中:轻量级;不需要Servlet环境

插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等

你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器

2、强大的模板语言

所有常用的指令:includeif/elseif/else、循环结构

在模板中创建和改变变量

几乎在任何地方都可以使用复杂表达式来指定值

命名的宏,可以具有位置参数和嵌套内容

名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突

输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;你可以定义自己的转换

3、通用数据模型

FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示

你可以使用抽象(接口)方式表示对象(JavaBeanXML文档、SQL查询结果集等等),告诉模板开发者使用方法,使其不受技术细节的打扰

4、为Web准备

在模板语言中内建处理典型Web相关任务(如HTML转义)的结构

能够集成到Model2 Web应用框架中作为JSP的替代

支持JSP标记库

MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员

5、智能的国际化和本地化

字符集智能化(内部使用UNICODE

数字格式本地化敏感

日期和时间格式本地化敏感

US字符集可以用作标识(如变量名)

多种不同语言的相同模板

6、强大的XML处理能力

<#recurse> <#visit>指令(2.3版本)用于递归遍历XML

在模板中清楚和直觉的访问XML对象模型

FreeMarker 2.3.23 RC1 发布,最终版本计划 7 月 5 日发布!

值得关注的改进 (完整文档请看这里):

  • Listing-related (#list) specialized convenience features that target some of the most typical tasks in templates:

    • New #list directive child directives, #else and #items deal with the special cases with 0-length lists. #sep makes inserting separators between items much easier than it was with if + var_has_next.

    • New built-ins that act on loop variables:            var?index (deprecates var_index), var?counter (1-based index),            var?has_next (deprecates var_has_next),            var?item_parity (returns "odd" or "even"),            var?item_cycle("lightRow", "darkRow"), and some more.

  • Convenience assignment operators, like in <#assign counter++> and <#assign counter += 2>

  • True ternary operator equivalent: someBoolean?then(whenTrue, whenFalse)

  • Switch as expression: someValue?switch(case1, result1, case2, result2, ... caseN, resultN, defaultResult)

  • FTL now supports camel case for the identifiers that are part of the template language. For example, <#noEscape>${x?upperCase}</#noEscape> or <#setting numberFormat="0.0"> or <#ftl stripText=true> are valid. You can just start using camel case without configuring anything, however, within the same template, FreeMarker will require you to use the same naming convention for all identifiers that are part of the template language. (Also, a certain naming convention can be enforced for all templates from configuration.)

  • 更多 FreemarkerServlet 配置模板加载,现在可以从 Servlet 3.0 META-INF/resources 加载

  • 各种 bug 修复

  • </ul>

    FreeMarker 2.3.23-rc01 下载 (Binary-only for Google App Engine is here...)