`
- 浏览:
166057 次
- 性别:
- 来自:
北京
-
xml 代码
- <# ... > 中存放所有freemaker的内容,之外的内容全部原样输出。
- <@ ... /> 是函数调用
- 两个定界符内的内容中,第一个符号表示指令或者函数名,其后的跟随参数。freemaker提供的控制包括如下:
- <#if condition><#elseif condition><#else><!---->#if> 条件判断
- <#list hash_or_seq as var><!---->#list> 遍历hash表或者collection(freemaker称作sequence)的成员
- <#macro name param1 param2 ... ><#nested param><!---->#macro> 宏,无返回参数
- <#function name param1 param2><#return val><!---->#function>函数,有返回参数
- var?member_function(...) 用函数对var进行转换,freemaker称为build-ins。实际内部实现类似member_function(var, ...)
- stringA[M .. N] 取子字符串,类似substring(stringA, M, N)
- {key:value, key2:value2 ...} 直接定义一个hash表
- [item0, item1, item2 ...] 直接定义一个序列
- hash0[key0] 存取hash表中key对应的元素
- seq0[5] 存取序列指定下标的元素
- <@function1 param0 param1 ... /> 调用函数function1
- <@macro0 param0 param1 ; nest_param0 nest_param1 ...> nest_body < /@macro > 调用宏,并处理宏的嵌套
- <#assign var = value > 定义变量并初始化
- <#local var = value> 在 macro 或者 function 中定义局部变量并初始化
- <#global var = value > 定义全局变量并初始化
- ${var} 输出并替换为表达式的值
- <#visit xmlnode> 调用macro匹配xmlnode本身及其子节点
- <#recurse xmlnode> 调用macro匹配xmlnode的子节点
-
-
- <#if condition > <!---->#if>
- <#list SequenceVar as variable > repeatThis <!---->#list>
- <#include "/copyright_footer.html">
-
- 一个ftl标记不能放在另外一个ftl标记里面,但是注释标记能够放在ftl标记里面。
-
- 系统预定义指令采用<#...><!---->#>
- 用户自定义指令采用<@...><!---->@>
-
- hash片段可以采用: products[10..19] or products[5..] 的格式。
-
- 序列也可以做加法计算:passwords + {"joe":"secret42"}
-
- 缺省值: name!"unknown" 或者 (user.name)!"unknown" 或者 name! 或者 (user.name)!
-
- null值检查: name?? or (user.name)??
-
- 转义列表:
-
- Escape sequence
-
-
- Meaning
-
- \"
-
-
- Quotation mark (u0022)
-
- \'
-
-
- Apostrophe (a.k.a. apostrophe-quote) (u0027)
-
- \\
-
-
- Back slash (u005C)
-
- \n
-
-
- Line feed (u000A)
-
- \r
-
-
- Carriage return (u000D)
-
- \t
-
-
- Horizontal tabulation (a.k.a. tab) (u0009)
-
- \b
-
-
- Backspace (u0008)
-
- \f
-
-
- Form feed (u000C)
-
- \l
-
-
- Less-than sign: <
-
- \g
-
-
- Greater-than sign: >
-
- \a
-
-
- Ampersand: &
-
- \{
-
-
- Curly bracket: {
-
- \xCode
-
-
- Character given with its hexadecimal Unicode code (UCS code)
-
- 如果想打印${,则需要将{转义,可以写成"$\{user}",或者可以用生字符(r指令):$(r "${xx}"}
-
- 序列构成:<#list ["winter", "spring", "summer", "autumn"] as x>${x}<!---->#list>
-
- 不同的对象可以存放在一个序列里面,比如:[2 + 2, [1, 2, 3, 4], "whatnot"]. 第一个是数字,第二个是序列,第三个是字符串。
-
- 可用采用start..end的方式来定义一个数字序列,start可以小于end,同时,end也可以省略。
-
- hash取值支持一下四种模式:book.author.name, book["author"].name, book.author.["name"], book["author"]["name"].
-
- 特殊变量是指freemaker引擎本身定义的变量。访问时,以.variable_name的语法访问。
-
- 变量表达式支持嵌套模式,比如:${"Hello ${user}!"}。
-
- 变量表达式在指令中的使用情况:
- 变量表达式可以在指令中,用“”的方式存在,不如:<#include "/footer/${company}.html">.
- 但是不允许下面的方式存在: <#if ${isBig}>Wow!<!---->#if>, 正确写法是:<#if isBig>Wow!<!---->#if>.
- 而且 <#if "${isBig}">Wow!<!---->#if>写法也不正确,因为"${isBig}"返回的是字符串,不是boolean类型。
-
- 字符串中取字符或字符串采用以下语法:${user[0]},${user[0..2]} ${user[4..]},${user?string(4)}
-
- 序列操作:
- 加法:<#list ["Joe", "Fred"] + ["Julia", "Kate"] as user> 但要注意串联之后的读取速度变慢。
- 子序列:seq[1..4]
-
- 序列和hash的串联都只能用于两个相加,不能有多个相加的模式,hash相加,如果两个相加的hash存在相同的key,则后面会覆盖前面的。
-
- 在使用>=或者>时,需要注意一些问题,因为freemaker会将>解释成标记的关闭符,为了解决这个问题,需要在表达式加上括号,比如: <#if (x > y)>. 或者使用 > and <符号来代替。
-
- 无值变量(包括无该变量,null,返回void,无属性等):unsafe_expr!default_expr or unsafe_expr! or (unsafe_expr)!default_expr or (unsafe_expr)!
- 缺省值可以是任何类型,不一定是数字,比如:hits!0 或者 colors!["red", "green", "blue"].
-
- 如果缺省值忽略,那么将会默认为空串、空序列或者空hash,因为freemarker支持多类型的值。不过要让默认值为0或false,则不能省略缺省值。
-
- 非顶层变量的无值处理:
- product.color! "red":只处理product不为空,color为空的缺省值处理,如果product为空,则freemaker会抛出异常。 (product.color)!"red":则会处理product为空,color为空,或者没有color属性的无值情况。
-
- 无值变量的判断操作:unsafe_expr?? or (unsafe_expr)??
- 判断变量是否是无值。
-
- 普通变量插入方式: ${expression},${3+5);
- 数字变量插入方式: #{expression} or #{expression; format}:过期。
- 变量只能用于文本区或者是字符串里面,比如:<h1>Hello ${name}!<!---->h1>以及 <#include "/footer/${company}.html">
-
- 数字值的插入:根据缺省的number_format输出,以及可以通过setting来达到设置数字格式的目的,也可以通过内置函数string来改变输出格式。
-
- 日期类型的格式设置:date_format, time_format 和 datetime_format
-
-
- 定义宏:
- 不带参数:<#macro 宏名>...<!---->#macro>,引用<@宏名 />
- 带参数:<#macro 宏名 参数...>...<!---->#macro>,引用<@宏名 参数1=值1.../>,带有参数的宏,调用是参数的值必须和参数的个数相同。当然也可以在宏定义时给参数一些默认值。比如:<#macro greet person color="black">
-
-
- 宏里面的嵌套内容:
- <#macro border>
- <table border=4 cellspacing=0 cellpadding=4><tr><td>
- <#nested>
- <!---->tr><!---->td><!---->table>
- <!---->#macro>
- 在宏的定义body中加入<#nested>指令。嵌套的内容可以是任何正确的ftl块。
-
- 宏的本地变量在嵌套内容中是不可见的。
-
- 宏定义时,<#nest>指令相当于调用定义的内容,而使用宏时,nest body相当于定义。
-
- <#macro repeat count>
- <#list 1..count as x>
- <#nested x, x/2, x==count>
- <!---->#list>
- <!---->#macro>
- <@repeat count=4 ; c, halfc, last>
- ${c}. ${halfc}<#if last> Last!<!---->#if>
- <!---->@repeat>
-
-
-
- 定义变量:
- 在模板中定义的变量将会隐藏(不是更改)数据模型根下面的同名的变量。
-
- 模板中的3种类型变量:
- 1:plain variables,能够在模板中的任何地方访问,一个模板include另外一个模板,也可以访问被包含模板的变量。可以通过assign或者macro指令产生或替换变量。
- 如果要访问数据模型中的变量,则可以通过.global来访问:
- <#assign user = "Joe Hider">
- ${user} <#-- prints: Joe Hider -->
- ${.globals.user} <#-- prints: Big Joe-->
- 2:Local variables,宏定义body中用local指令创建或者替换。
- 3:Loop variables:由list指令产生。
-
-
- namespaces:
- <#import "/lib/my_test.ftl" as my> <#-- the hash called "my" will be the "gate" -->
- <@my.copyright date="1999-2002"/>
- ${my.mail}
-
- 设置命名空间里面的变量:<#assign mail="jsmith@other.com" in my>
-
- 命名空间与数据模型:命名空间的ftl可以访问数据模型的变量。同样命名空间的变量也会隐藏数据模型中同名的变量。
-
- 空白问题:
- 1:White-space stripping,默认为enabled,清除ftl标记带来的空白以及缩进。处理模板的空白。
- 2:t, rt, lt指令。
- 3:ftl的参数strip_text.
-
- 用compress directive或者transform来处理输出。
- <#compress>...<!---->#compress>:消除空白行。
- <@compress single_line=true>.../@compress将输出压缩为一行。
-
- 可替换语法:
- freemarker可用"["代替"<".在模板的文件开头加上[#ftl].
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
Freemarker学习笔记可以帮助初学者了解,快速掌握Freemarker
FreeMarker学习笔记
这篇“Freemarker学习笔记一【乱码解决】”将指导我们如何解决这个问题。 首先,我们需要了解乱码的常见原因。在Java Web开发中,乱码通常与以下因素有关: 1. **文件编码**:Freemarker模板文件(.ftl)的编码...
本压缩包集合了丰富的Freemarker学习资源,涵盖从基础到进阶的各种知识点,以下是这些文档中可能包含的详细内容: 1. **Freemarker中文手册.pdf**: 这份手册通常会详细介绍Freemarker的基本概念,如模板语言、...
以下是对FreeMarker学习笔记的详细解释: 1. **基本语法** - **模板**:FreeMarker模板是由HTML、XML或其他文本格式组成的文件,其中包含FTL(FreeMarker Template Language)指令。模板设计者无需关注数据来源,...
`freemarker学习笔记.doc`可能包含了如何在Struts2中集成和使用Freemarker模板的详细步骤。 2. **数据绑定**:在Freemarker模板中,可以使用`<@s.action>`或`<@s.property>`等标签来直接访问Struts2 Action中的属性...
6. **学习笔记** - **入门**:从简单的变量输出开始,逐步了解FreeMarker的基本语法。 - **进阶**:掌握控制结构和逻辑,以及如何与Java对象交互。 - **实践**:通过实际项目应用,提升解决实际问题的能力。 - *...
这个“freemarker笔记”很可能是一个关于理解和使用FreeMarker模板语言的学习资料,其中可能涵盖了FreeMarker的基本概念、语法、以及在实际开发中的应用。 FreeMarker的核心概念是模板和数据模型。模板是HTML或者...
SpringBoot经典学习笔记是针对Java开发者的宝贵资源,它涵盖了SpringBoot的核心概念、特性以及实践应用。SpringBoot是由Pivotal团队开发的框架,旨在简化Spring应用的初始搭建以及开发过程,通过“约定优于配置”的...
- `Freemaker_入门+深入+开发指南+学习笔记.doc`:这份文档提供了从基础到高级的Freemarker学习路径,包括基本语法、模板设计原则和实践案例。 - `freemaeker全面教程.doc`:这份教程全面覆盖了Freemarker的各个...
### Thymeleaf 学习笔记关键知识点 #### 一、Thymeleaf 概述与优势 **Thymeleaf** 是一款现代且高级的模板引擎,它为 Web 和独立环境提供了强大的模板处理能力。根据给定内容,我们可以看出 Thymeleaf 的一些主要...
10. **jeecms学习笔记**:jeecms学习笔记.txt可能是某位开发者的学习心得,可能包含了一些实战经验和技巧。 通过这些资源,你可以系统地学习JEECMS的各个方面,从基础操作到高级开发,再到FreeMarker的运用,都能...
Spring Boot 是一个基于 Spring 框架的快速开发...这个完整的 Spring Boot 学习笔记涵盖了从基础到进阶的各个方面,通过学习和实践,你可以掌握 Spring Boot 开发的核心技能,从而高效地构建高质量的 Java 后端应用。