`
wtnhwbb
  • 浏览: 166036 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

freemaker学习笔记

阅读更多
xml 代码
 
  1.  <# ... > 中存放所有freemaker的内容,之外的内容全部原样输出。  
  2. <@ ... /> 是函数调用  
  3. 两个定界符内的内容中,第一个符号表示指令或者函数名,其后的跟随参数。freemaker提供的控制包括如下:  
  4. <#if condition><#elseif condition><#else><!---->#if> 条件判断  
  5. <#list hash_or_seq as var><!---->#list> 遍历hash表或者collection(freemaker称作sequence)的成员  
  6. <#macro name param1 param2 ... ><#nested param><!---->#macro> 宏,无返回参数  
  7. <#function name param1 param2><#return val><!---->#function>函数,有返回参数  
  8. var?member_function(...) 用函数对var进行转换,freemaker称为build-ins。实际内部实现类似member_function(var, ...)  
  9. stringA[M .. N] 取子字符串,类似substring(stringA, M, N)  
  10. {key:value, key2:value2 ...} 直接定义一个hash表  
  11. [item0, item1, item2 ...] 直接定义一个序列  
  12. hash0[key0] 存取hash表中key对应的元素  
  13. seq0[5] 存取序列指定下标的元素  
  14. <@function1 param0 param1 ... /> 调用函数function1  
  15. <@macro0 param0 param1 ; nest_param0 nest_param1 ...> nest_body < /@macro > 调用宏,并处理宏的嵌套  
  16. <#assign var = value > 定义变量并初始化  
  17. <#local var = value> 在 macro 或者 function 中定义局部变量并初始化  
  18. <#global var = value > 定义全局变量并初始化  
  19. ${var} 输出并替换为表达式的值  
  20. <#visit xmlnode> 调用macro匹配xmlnode本身及其子节点  
  21. <#recurse xmlnode> 调用macro匹配xmlnode的子节点  
  22.   
  23.   
  24. <#if condition > <!---->#if>  
  25. <#list SequenceVar as variable > repeatThis <!---->#list>  
  26. <#include "/copyright_footer.html">  
  27.   
  28. 一个ftl标记不能放在另外一个ftl标记里面,但是注释标记能够放在ftl标记里面。  
  29.   
  30. 系统预定义指令采用<#...><!---->#>  
  31. 用户自定义指令采用<@...><!---->@>  
  32.   
  33. hash片段可以采用: products[10..19] or products[5..] 的格式。  
  34.   
  35. 序列也可以做加法计算:passwords + {"joe":"secret42"}  
  36.   
  37. 缺省值: name!"unknown" 或者 (user.name)!"unknown" 或者 name! 或者 (user.name)!  
  38.   
  39. null值检查: name?? or (user.name)??  
  40.   
  41. 转义列表:  
  42.   
  43. Escape sequence  
  44.       
  45.   
  46. Meaning  
  47.   
  48. \"  
  49.       
  50.   
  51. Quotation mark (u0022)  
  52.   
  53. \'  
  54.       
  55.   
  56. Apostrophe (a.k.a. apostrophe-quote) (u0027)  
  57.   
  58. \\  
  59.       
  60.   
  61. Back slash (u005C)  
  62.   
  63. \n  
  64.       
  65.   
  66. Line feed (u000A)  
  67.   
  68. \r  
  69.       
  70.   
  71. Carriage return (u000D)  
  72.   
  73. \t  
  74.       
  75.   
  76. Horizontal tabulation (a.k.a. tab) (u0009)  
  77.   
  78. \b  
  79.       
  80.   
  81. Backspace (u0008)  
  82.   
  83. \f  
  84.       
  85.   
  86. Form feed (u000C)  
  87.   
  88. \l  
  89.       
  90.   
  91. Less-than sign: <  
  92.   
  93. \g  
  94.       
  95.   
  96. Greater-than sign: >  
  97.   
  98. \a  
  99.       
  100.   
  101. Ampersand: &  
  102.   
  103. \{  
  104.       
  105.   
  106. Curly bracket: {  
  107.   
  108. \xCode  
  109.       
  110.   
  111. Character given with its hexadecimal Unicode code (UCS code)  
  112.   
  113. 如果想打印${,则需要将{转义,可以写成"$\{user}",或者可以用生字符(r指令):$(r "${xx}"}  
  114.   
  115. 序列构成:<#list ["winter", "spring", "summer", "autumn"] as x>${x}<!---->#list>  
  116.   
  117. 不同的对象可以存放在一个序列里面,比如:[2 + 2, [1, 2, 3, 4], "whatnot"]. 第一个是数字,第二个是序列,第三个是字符串。  
  118.   
  119. 可用采用start..end的方式来定义一个数字序列,start可以小于end,同时,end也可以省略。  
  120.   
  121. hash取值支持一下四种模式:book.author.name, book["author"].name, book.author.["name"], book["author"]["name"].  
  122.   
  123. 特殊变量是指freemaker引擎本身定义的变量。访问时,以.variable_name的语法访问。  
  124.   
  125. 变量表达式支持嵌套模式,比如:${"Hello ${user}!"}。  
  126.   
  127. 变量表达式在指令中的使用情况:  
  128. 变量表达式可以在指令中,用“”的方式存在,不如:<#include "/footer/${company}.html">.  
  129. 但是不允许下面的方式存在: <#if ${isBig}>Wow!<!---->#if>, 正确写法是:<#if isBig>Wow!<!---->#if>.  
  130. 而且 <#if "${isBig}">Wow!<!---->#if>写法也不正确,因为"${isBig}"返回的是字符串,不是boolean类型。  
  131.   
  132. 字符串中取字符或字符串采用以下语法:${user[0]},${user[0..2]} ${user[4..]},${user?string(4)}  
  133.   
  134. 序列操作:  
  135.    加法:<#list ["Joe", "Fred"] + ["Julia", "Kate"] as user> 但要注意串联之后的读取速度变慢。  
  136.    子序列:seq[1..4]  
  137.   
  138. 序列和hash的串联都只能用于两个相加,不能有多个相加的模式,hash相加,如果两个相加的hash存在相同的key,则后面会覆盖前面的。  
  139.   
  140. 在使用>=或者>时,需要注意一些问题,因为freemaker会将>解释成标记的关闭符,为了解决这个问题,需要在表达式加上括号,比如: <#if (x > y)>. 或者使用 > and <符号来代替。  
  141.   
  142. 无值变量(包括无该变量,null,返回void,无属性等):unsafe_expr!default_expr or unsafe_expr! or (unsafe_expr)!default_expr or (unsafe_expr)!  
  143. 缺省值可以是任何类型,不一定是数字,比如:hits!0 或者 colors!["red", "green", "blue"].  
  144.   
  145. 如果缺省值忽略,那么将会默认为空串、空序列或者空hash,因为freemarker支持多类型的值。不过要让默认值为0或false,则不能省略缺省值。  
  146.   
  147. 非顶层变量的无值处理:  
  148.    product.color! "red":只处理product不为空,color为空的缺省值处理,如果product为空,则freemaker会抛出异常。 (product.color)!"red":则会处理product为空,color为空,或者没有color属性的无值情况。  
  149.   
  150. 无值变量的判断操作:unsafe_expr?? or (unsafe_expr)??  
  151. 判断变量是否是无值。  
  152.   
  153. 普通变量插入方式: ${expression},${3+5);  
  154. 数字变量插入方式: #{expression} or #{expression; format}:过期。  
  155. 变量只能用于文本区或者是字符串里面,比如:<h1>Hello ${name}!<!---->h1>以及 <#include "/footer/${company}.html">  
  156.   
  157. 数字值的插入:根据缺省的number_format输出,以及可以通过setting来达到设置数字格式的目的,也可以通过内置函数string来改变输出格式。  
  158.   
  159. 日期类型的格式设置:date_format, time_format 和 datetime_format  
  160.   
  161.   
  162. 定义宏:  
  163.    不带参数:<#macro 宏名>...<!---->#macro>,引用<@宏名 />  
  164.    带参数:<#macro 宏名 参数...>...<!---->#macro>,引用<@宏名 参数1=值1.../>,带有参数的宏,调用是参数的值必须和参数的个数相同。当然也可以在宏定义时给参数一些默认值。比如:<#macro greet person color="black">  
  165.   
  166.   
  167. 宏里面的嵌套内容:  
  168. <#macro border>  
  169.   <table border=4 cellspacing=0 cellpadding=4><tr><td>  
  170.     <#nested>  
  171.   <!---->tr><!---->td><!---->table>  
  172. <!---->#macro>   
  173. 在宏的定义body中加入<#nested>指令。嵌套的内容可以是任何正确的ftl块。  
  174.   
  175. 宏的本地变量在嵌套内容中是不可见的。  
  176.   
  177. 宏定义时,<#nest>指令相当于调用定义的内容,而使用宏时,nest body相当于定义。  
  178.   
  179. <#macro repeat count>  
  180.   <#list 1..count as x>  
  181.     <#nested x, x/2, x==count>  
  182.   <!---->#list>  
  183. <!---->#macro>  
  184. <@repeat count=4 ; c, halfc, last>  
  185.   ${c}. ${halfc}<#if last> Last!<!---->#if>  
  186. <!---->@repeat>   
  187.   
  188.   
  189.   
  190. 定义变量:  
  191.    在模板中定义的变量将会隐藏(不是更改)数据模型根下面的同名的变量。  
  192.   
  193. 模板中的3种类型变量:  
  194.    1:plain variables,能够在模板中的任何地方访问,一个模板include另外一个模板,也可以访问被包含模板的变量。可以通过assign或者macro指令产生或替换变量。  
  195.    如果要访问数据模型中的变量,则可以通过.global来访问:  
  196.    <#assign user = "Joe Hider">  
  197.    ${user}          <#-- prints: Joe Hider -->  
  198.    ${.globals.user} <#-- prints: Big Joe-->   
  199.    2:Local variables,宏定义body中用local指令创建或者替换。  
  200.    3:Loop variables:由list指令产生。  
  201.   
  202.   
  203. namespaces:  
  204. <#import "/lib/my_test.ftl" as my> <#-- the hash called "my" will be the "gate" -->  
  205. <@my.copyright date="1999-2002"/>  
  206. ${my.mail}   
  207.   
  208. 设置命名空间里面的变量:<#assign mail="jsmith@other.com" in my>  
  209.   
  210. 命名空间与数据模型:命名空间的ftl可以访问数据模型的变量。同样命名空间的变量也会隐藏数据模型中同名的变量。  
  211.   
  212. 空白问题:  
  213. 1:White-space stripping,默认为enabled,清除ftl标记带来的空白以及缩进。处理模板的空白。  
  214. 2:t, rt, lt指令。  
  215. 3:ftl的参数strip_text.  
  216.   
  217. 用compress directive或者transform来处理输出。  
  218. <#compress>...<!---->#compress>:消除空白行。  
  219. <@compress single_line=true>.../@compress将输出压缩为一行。  
  220.   
  221. 可替换语法:  
  222. freemarker可用"["代替"<".在模板的文件开头加上[#ftl].  
分享到:
评论

相关推荐

    Freemarker学习笔记

    Freemarker学习笔记可以帮助初学者了解,快速掌握Freemarker

    FreeMarker学习笔记

    FreeMarker学习笔记

    Freemarker 学习笔记一 【乱码解决】

    这篇“Freemarker学习笔记一【乱码解决】”将指导我们如何解决这个问题。 首先,我们需要了解乱码的常见原因。在Java Web开发中,乱码通常与以下因素有关: 1. **文件编码**:Freemarker模板文件(.ftl)的编码...

    freemarker学习资料汇总

    本压缩包集合了丰富的Freemarker学习资源,涵盖从基础到进阶的各种知识点,以下是这些文档中可能包含的详细内容: 1. **Freemarker中文手册.pdf**: 这份手册通常会详细介绍Freemarker的基本概念,如模板语言、...

    freemark学习笔记

    以下是对FreeMarker学习笔记的详细解释: 1. **基本语法** - **模板**:FreeMarker模板是由HTML、XML或其他文本格式组成的文件,其中包含FTL(FreeMarker Template Language)指令。模板设计者无需关注数据来源,...

    freemaker struts2

    `freemarker学习笔记.doc`可能包含了如何在Struts2中集成和使用Freemarker模板的详细步骤。 2. **数据绑定**:在Freemarker模板中,可以使用`&lt;@s.action&gt;`或`&lt;@s.property&gt;`等标签来直接访问Struts2 Action中的属性...

    FreeMarker学习资料整理

    6. **学习笔记** - **入门**:从简单的变量输出开始,逐步了解FreeMarker的基本语法。 - **进阶**:掌握控制结构和逻辑,以及如何与Java对象交互。 - **实践**:通过实际项目应用,提升解决实际问题的能力。 - *...

    freemarker笔记

    这个“freemarker笔记”很可能是一个关于理解和使用FreeMarker模板语言的学习资料,其中可能涵盖了FreeMarker的基本概念、语法、以及在实际开发中的应用。 FreeMarker的核心概念是模板和数据模型。模板是HTML或者...

    SpringBoot经典学习笔记_springboot_SpringBoot经典学习笔记_

    SpringBoot经典学习笔记是针对Java开发者的宝贵资源,它涵盖了SpringBoot的核心概念、特性以及实践应用。SpringBoot是由Pivotal团队开发的框架,旨在简化Spring应用的初始搭建以及开发过程,通过“约定优于配置”的...

    freemarker及jeecms标签使用学习文档

    - `Freemaker_入门+深入+开发指南+学习笔记.doc`:这份文档提供了从基础到高级的Freemarker学习路径,包括基本语法、模板设计原则和实践案例。 - `freemaeker全面教程.doc`:这份教程全面覆盖了Freemarker的各个...

    thymeleaf+学习笔记

    ### Thymeleaf 学习笔记关键知识点 #### 一、Thymeleaf 概述与优势 **Thymeleaf** 是一款现代且高级的模板引擎,它为 Web 和独立环境提供了强大的模板处理能力。根据给定内容,我们可以看出 Thymeleaf 的一些主要...

    JEECMS自学帮助集合(包括FreeMarker)

    10. **jeecms学习笔记**:jeecms学习笔记.txt可能是某位开发者的学习心得,可能包含了一些实战经验和技巧。 通过这些资源,你可以系统地学习JEECMS的各个方面,从基础操作到高级开发,再到FreeMarker的运用,都能...

    SpringBoot学习笔记完整教程

    Spring Boot 是一个基于 Spring 框架的快速开发...这个完整的 Spring Boot 学习笔记涵盖了从基础到进阶的各个方面,通过学习和实践,你可以掌握 Spring Boot 开发的核心技能,从而高效地构建高质量的 Java 后端应用。

Global site tag (gtag.js) - Google Analytics