`

freemarker语法开发指南

阅读更多
freemarker语法开发指南
0
常用语法
 EG.一个对象BOOK
  
1.输出 $...{book.name}
空值判断:$
...{book.name?if_exists },
$
...{book.name?default(‘xxx’)}//默认值xxx
$...{ book.name!"xxx"}//默认值xxx
日期格式:$...{book.date?string('yyyy-MM-dd')}
数字格式:$
...{book?string.number}--20
$
...{book?string.currency}--<#-- $20.00 -->
$
...{book?string.percent}<#-- 20% -->
插入布尔值:
<#assign foo=true />
$
...{foo?string("yes","no")} <#-- yes -->

 】内置方法

 

一:数字型
<#assign answer=42/>
$
...{answer}
$
...{answer?string}  <#-- the same as $...{answer} -->
$
...{answer?string.number}
$
...{answer?string.currency}
$
...{answer?string.percent}

<#setting number_format="0.###E0"/>

$
...{12345?string("0.####E0")}  


$
...{answer?string("number")} 等同于:$...{answer?string.number}.

二:日期型:
预定义格式包括:
short ,middle和long。


$
...{openingTime?string.short}
$
...{openingTime?string.medium}
$
...{openingTime?string.long}
组合使用:$
...{lastUpdated?string.short_long}
$
...{lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}

三:逻辑型
foo
?string
foo
?string("yes""no")

 

 

四:序列的内置方法:
first

last

seq_contains
$
...{x?seq_contains("blue")?string("yes""no")}

seq_index_of

seq_last_index_of

reverse

size

sort

sort_by
多层次的hash排序

<#assign members = [
    
...{"name"...{"first""Joe""last""Smith"}"age"40},
    
...{"name"...{"first""Fred""last""Crooger"}"age"35},
    
...{"name"...{"first""Amanda""last""Fox"}"age"25}]>
Sorted by name.last: 
<#list members?sort_by(['name''last']) as m>
- $...{m.name.last}, $...{m.name.first}: $...{m.age} years old
</#list> 

chunk:将一个序列分解成几个序列。

<#assign seq = ['a''b''c''d''e''f''g''h''i''j']>

<#list seq?chunk(4) as row>
  
<#list row as cell>$...{cell} </#list>
</#list>

<#list seq?chunk(4'-') as row>
  
<#list row as cell>$...{cell} </#list>
</#list>
chunk经常用于分栏或者表格输出的格式。

五:hash内置方法:

keys:
values:

 

】序列 由逗号分隔的变量列表,由方括号限定,类似java中的一维数组

<#assign seq = ["winter", "spring", "summer", "autumn"]>
<#list seq as x>
  ${x_index + 1}. ${x}

<#if x_has_next>,

</#list>

输出
  1. winter,
  2. spring,
  3. summer,
  4. autumn  

】Hashes(散列)-由逗号分隔的键-值列表,由大括号限定,键和值之间用冒号分隔:{"name":"green mouse", "price":150},键和值都是表达式,但是键必须是字符串。

 

<#assign ages = ...{"Joe":23"Fred":25} + ...{"Joe":30"Julia":18}>
- Joe is $...{ages.Joe}
- Fred is $...{ages.Fred}
- Julia is $...{ages.Julia} 

 

结果:
- Joe is 30
- Fred is 25
- Julia is 18 

 

freemarker的空值和默认值

${user?if_exists}      

${user?default('your name')}

判断对象是不是null
<#if mouse?exists>
      Mouse found
<#else>

或<#if book.name?? >

 Mouse found

</#if>

list 空值判断  <#if bookList?size = 0>

算术运算

比较操作符-<#if expression>...</#if>
1.)使用=(或==,完全相等)测试两个值是否相等,使用!= 测试两个值是否不相等
2.)=!=两边必须是相同类型的值,否则会产生错误,例如<#if 1 = "1">会引起错误
3.)Freemarker是精确比较,所以"x""x  ""X"是不相等的
4.)对数字和日期可以使用<<=>>=,但不能用于字符串
5.)由于Freemarker会将>解释成FTL标记的结束字符,所以对于>>=可以使用括号来避免这种情况,例如<#if (x > y)>,另一种替代的方法是,使用lt、lte、gt和gte来替代<<=>>=

逻辑操作符-
&&(and)、||(or)、!(not),只能用于布尔值,否则会产生错误
<#if x < 12 && color = "green">
  We have less than 
12 things, and they are green.
</#if>
<#if !hot> <#-- here hot must be a boolean -->
  It
's not hot.
</#if>  

内置函数-用法类似访问hash(散列)的子变量,只是使用
"?"替代".",例如:user?upper_case
下面列出常用的一些函数:
对于字符串
html-对字符串进行HTML编码
cap_first-使字符串第一个字母大写
lower_case-将字符串转换成小写
trim-去掉字符串前后的空白字符
对于Sequences(序列)
size-获得序列中元素的数目
对于数字
int-取得数字的整数部分(如-1.9?int的结果是-1

例一:

<#-- test的值为Tom & Jerry -->
$
...{test?html}
$
...{test?upper_case?html}
结果:
Tom 
&amp; Jerry
TOM 
&amp; JERRY 

例二:

<#-- seasons的值为"winter""spring""summer""autumn" --> 
$
...{seasons?size}
$
...{seasons[1]?cap_first} <#-- left side can by any expression -->
$
...{"horse"?cap_first}  
结果:
4
Spring
Horse  

方法的调用
$
...{repeat("What"3)} 
$
...{repeat(repeat("x"2), 3+ repeat("What"4)?upper_case} 
结果:
WhatWhatWhat
xxxxxxWHATWHATWHATWHAT 

操作符优先顺序
http://images
分享到:
评论
1 楼 txy821 2010-03-09  
<table width="100%" border="0" cellspacing="1" cellpadding="0">
      <tr>
      <#assign n = 0 />
      <#list list?if_exists as pojo>
      <#assign n = n+1 />
      <#if n%3 = 0 ></tr><tr></#if>
      <td  class="zx_data5 border_left border_left  border_top">${pojo.webName?if_exists} <span class="red">(${pojo.company.shortName?if_exists})</span></td>
      </#list>
     </tr>
    </table>

相关推荐

    Freemarker模版开发指南

    本指南将深入探讨Freemarker模板的开发,帮助你掌握其主要特性和用法。 1. **模板语法** Freemarker的模板语言基于简单的文本文件,使用特定的指令和表达式。例如,`&lt;#if&gt;`用于条件判断,`&lt;#foreach&gt;`用于循环,`$...

    FreeMarker指南

    ### FreeMarker设计指南详解 #### 一、FreeMarker概述 FreeMarker是一个强大的模板引擎,用于将数据模型与表现层分离,使得设计者可以专注于页面布局和样式,而程序员则负责处理业务逻辑和数据处理。其核心思想是...

    FreeMarker开发指南

    本开发指南将深入探讨FreeMarker的关键概念、指令、常用方法以及在Web开发中的注意事项。 1. **基本概念** - **Sequence**: 代表序列,对应Java中的List、数组等非键值对的集合,如ArrayList或数组。可以迭代遍历...

    freemarker使有指南

    `FreeMarker概述.doc`可能是一个详细的文档,涵盖了FreeMarker的基本概念、语法、配置以及最佳实践。它可能包含如何创建模板、如何引用数据模型、如何控制流程(如条件语句和循环)、以及如何处理异常等信息。这个...

    FreeMarker中文手册+开发指南.docx

    手册可能包含对FreeMarker语法的详细描述,包括模板元素(如变量、控制结构、内置函数等)、指令的使用方法,以及如何处理各种数据类型。此外,文档可能还涵盖了错误处理、性能优化和最佳实践等主题。 **4. 联系...

    Freemarker开发指南

    ### Freemarker开发指南知识点 #### 1. 概述 - **定义**: Freemarker 是一个用纯 Java 编写的模板引擎,主要用于根据模板生成文本输出。它可以用来生成 HTML Web 页面,尤其是在 MVC 架构中非常实用。 - **设计...

    FreeMarker 设计指南

    二、FreeMarker语法 1. **变量表达式**: `${variable}` 用于输出变量的值。变量可以是Java对象的属性或方法的返回值。 2. **注释**: `&lt;!--#ftl comment --&gt;` 用于在模板中添加注释,这些注释不会出现在生成的...

    FreeMarker入门指南(详细指南见附件)

    这篇《FreeMarker入门指南》将深入介绍其基本概念、语法以及在实际项目中的应用。 一、FreeMarker简介 FreeMarker是一个基于模板的Java库,用于生成文本输出。它的主要工作原理是将模板(template)与数据模型...

    freemarker-ide-0.9.14

    这个插件版本为0.9.14,可能包含了对Freemarker语法的高亮显示、代码自动完成、错误检查、模板调试等功能。这些特性能够帮助开发者快速识别和修正模板中的问题,提高开发效率。`README.txt` 文件通常包含安装和使用...

    freemarker操作手册-完整freemarker教程

    Freemarker是一个强大的模板引擎,常用于Web应用中的视图层开发,特别是在Java环境中,它作为MVC设计模式的一部分,负责生成动态HTML或其他格式的文本。本教程将深入讲解Freemarker的核心概念、语法和实际应用,帮助...

    freemarker学习资料汇总

    2. **freemarker语法完整版.doc**: 这个文档将深入解析Freemarker的语法特性,包括模板注释、条件语句(如`&lt;#if&gt;`、`&lt;#else&gt;`、`&lt;#choose&gt;`)、循环结构(如`&lt;#list&gt;`)、逻辑运算符和比较运算符。同时,可能会讲解...

    FreeMarker设计指南(完整整理)

    模板则包含了如何展示这些数据的指令,这些指令以特定的FreeMarker语法编写。FreeMarker引擎解析模板,根据数据模型填充模板中的占位符,生成最终的文本。 在FreeMarker中,有几个重要的概念需要理解: 1. **变量*...

    FreeMarker设计指南

    二、FreeMarker语法特性 1. 输出表达式:`${expression}`用于输出变量或表达式的值,如果值为null,则不输出任何内容。 2. 变量赋值:`&lt;#assign var = expr&gt;`可以为变量赋值,`var`是变量名,`expr`是表达式。 3....

    freemarker 源码、中文API、 freemarker Myeclipse 编辑器

    其次,`freemarker 插件 安装提示.txt`文件很可能是MyEclipse编辑器中安装Freemarker插件的步骤指南。MyEclipse是一款集成开发环境,对于Java开发者来说非常方便。Freemarker插件的安装可以让开发者在IDE内直接编辑...

    eclipse插件freemarker-ide+安装文档

    - 安装后,Eclipse将识别`.ftl`文件,并应用特定的FreeMarker语法高亮,使得代码更易读。 2. **代码完成** - 插件提供代码补全功能,当在模板中输入变量或指令时,能够自动提示相关的FreeMarker关键字和自定义...

    freemarker-2.3.22

    这些文档是学习和理解Freemarker语法、配置以及最佳实践的重要资源。 `freemarker.jar`是Freemarker库的二进制文件,它是实际运行时需要导入到Java项目的类路径中的,以便使用Freemarker的功能,如创建模板、解析...

    FreeMarker设计指南+概述(doc)

    这份指南涵盖了FreeMarker的核心概念、语法特性以及最佳实践。以下是一些关键知识点: 1. **基础概念**: - **模板**: 模板是HTML或其他格式的文本,其中包含可由FreeMarker替换的数据标记。 - **数据模型**: ...

Global site tag (gtag.js) - Google Analytics