`
Bo_wen
  • 浏览: 2046 次
社区版块
存档分类
最新评论

freemarker 基础语法学习笔记

 
阅读更多

一.FreeMarker简介:
   1.FreeMarker是一个模板引擎,一个基于模板生成HTML/XML/RTF/Java源代码等等的通用工具,使用纯Java编写
   2.FreeMarker与容器无关,因为它并不知道HTTP或Servlet,也可以在FreeMarker模板中使用JSP标记库 //支持JSP标记库
   3.FreeMarker是一个轻量级组件(易于嵌入到产品中),不需要Servlet环境
   4.可以在FreeMarker模板中清楚和直觉地访问XML对象模型 //如:用<#recurse>和<#visit>指令(2.3版本)结构递归遍历XML树
   5.FreeMarker页面的扩展/后缀名为.ftl

二.FreeMarker中的指令语法:
    ftl页面支持所有Html标记和js、css语法,ftl指令区分大小写,ftl页面中的<script>中也可使用ftl指令
   注:ftl中可以使用内置函数操作/维护与Java后台程序无关的string、list和map等,如:通过索引访问list元素、获得子list、合并list、对list排序,通过key变量访问map元素
      、检查map是否为空、获得key或值的list
   1.ftl中判断对象/字符串是否为null:
     在<#if>指令中用Object或String?exists判断,在${}指令中用Object或String?if_exists输出布尔形式判断
   2.ftl中对字符串的处理
     ${String?string("yyyy-MM-dd HH:mm:ss zzzz")/("EEE,MMM d,''yy")/("EEEE,MMMM dd,yyyy,hh:mm:ss a '('zzz')'")} //日期格式化
     ${String?substring(startIndex,endIndex)} //截取字符串,还可以用更简单的${String[0..number]}
     ${String?split("*")} //用指定的分隔符将字符串拆分成数组
     ${String?replace("字符串中指定的子串","替换后的子串"[,"规则参数"])} //将字符串中的子串从左到右替换为指定的子串,规则参数有:i、r、m、s、c、f,具体含义如下:
        i:不区分大小写
        f:只替换第一个出现被替换字符串的字符串
        r:表示第二个参数(替换后的子串)是正则表达式
        m:
        s:
        c:
     ${String?length} //获取字符串长度
     ${String?trim} //字符串去空格
     ${String?upper_case} //将字母字符串转为大写
     ${String?capitalize} //将字母字符串的每个单词的首字母转为大写
     ${String?lower_case} //将字母字符串转为小写
     ${String?cap_first} //将字符串中的第一个字符转为大写
     ${String?uncap_first} //将字符串中的第一个字符转为小写
     ${String?ends_with("str")} //判断字符串是否以指定子串结尾/返回布尔值
     ${String?index_of("查找的子串"[,开始查找的索引])} //在字符串中查找子串第一次出现处的索引,没有找到则返回-1
     ${String?contains("str")} //判断字符串中是否包含子串,返回布尔值
     ${String?number} //将字符串转为数字
     ${bool?string("yes/是","no/否")} //布尔值格式化
   3.ftl中对整型的处理:
     #{int?c} //将数字转为字符串,还可用#{int?string}
     #{int?string.currency} //将数字转为货币(¥)形式,还可用#{int?string("currency")}
     #{int?string.percent} //将数字转为百分比(%)形式,还可用${int?string("percent")}
     数字格式化:#{变量;format},其中format可以是:mn:小数部分最少n位,Mn:小数部分最多n位;如:
        <#assign a=2.582/>,<#assign b=4/>
        #{a;M2} //输出2.58
        #{a;m2} //输出2.58
        #{b;m2} //输出4.00
        #{a;m1M2} //输出2.58
        #{b;m1M2} //输出4.0
   4.ftl中的控制结构:
     (1).<#if>、<#else>/<#else if>、</#if>
         判断对象是否为空:?exists
         判断变量是否为空:?if_exists
         判断集合/数组中是否有数据:?has_content
     (2).switch结构:
         <#switch 变量>
           <#case value>...<#break>
           <#case value>...<#break>
           <#default>...<#break>
         </#switch>
   5.ftl中的循环结构:<#list 4个范围内的集合/数组 as 遍历的集合/数组中的对象的别名>循环体</#list> //ftl中的循环也支持break子句
     获取集合的当前循环索引:集合的别名_index
     判断是否达到最后一次循环:集合的别名_has_next //返回true/false
     注:ftl中可以使用类似[i]语法的索引方式访问集合/数组中的元素、可以在循环外访问循环体内的控制变量
   6.ftl访问集合/数组:
     集合对象?first //获取集合中的第一个值
     集合对象?last  //获取集合中的最后一个值
     集合对象?reverse //将集合中的顺序反转(即倒序排序)
     集合对象?size //获取集合中的元素个数
     集合对象?sort //将集合中的对象转化为字符串后顺序排序
     集合对象?sort_by(value) //按集合中对象的属性value进行排序
   7.ftl访问Hash:
     hash对象?keys //返回hash中的所有key,返回结果为集合
     hash对象?values //返回hash中的所有value,返回结果为sequence
   8.ftl中定义变量:
     (1).使用<#assign 变量名="值">指令定义局部变量 //用于在页面创建或替换一个变量(当前ftl范围内/page范围内的变量声明,在宏定义体中有效)
     (2).plain变量:可以在模板的任何地方访问,包括使用include指令插入的模板,
     (3).使用local指令创建和替换
   9.ftl中的运算符:
     比较运算符可以用gt、gte、、lt、lte、或>、>=、==、<、<=、!= //不推荐使用后者(因为麻烦),因为Freemarker会将>解释成FTL标记的结束字符,故对于>和>=要用括号括起来(如:& lt;#if (x>y)>)
     算术运算符:+、-、*、/、%
     逻辑操作符:&&:and、||:or、!:not //只能用于布尔值

   <#recurse>和<#visit>指令 //递归遍历XML树,访问XML对象模型
   10.import指令:用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中
     <#import "/lib/common.ftl" as com> //此处将导入/lib/common.ftl模板文件中的所有变量,将这些变量放置在一个名为com的Map对象中
   11.include指令:用于包含指定页面(类似JSP的包含指令,如:<#include "/common/copyright.ftl" encoding="GBK">)
   12.setting指令:用来设置ftl使用的环境,如:<#setting locale="en_US">
   13.ftl中的宏:宏相当于程序中的函数,可以传参,可以调用宏以执行宏体内的内容,在那里调用宏宏体中的内容就相当于写在那里。以便在模板中通过用户定义指令使用该变量
      (1).宏的定义:用macro指令定义,如:<#macro 宏名 [宏的输入参数名 ...(可选)]>Hello Joe!</#macro> //创建时可带多个参数,可在定义时指定参数的缺省值,否则在调用宏
           时必须对所有参数赋值,宏的参数只在宏范围中有效,在宏体中使用宏中的参数用${参数名}
      (2).宏的调用:使用@表示调用宏,可以是双标签也可以是单标签,如:<@宏名 [宏的输入参数名="值" ...(可选,当宏定义中带参时这里才有参数)]></@宏名> //宏调用中可嵌套
          调用其它宏,调用的同时给多个参数赋值,如果在定义时指定了参数的缺省值则在调用时可以不用给参数赋值,否则必须对所有参数赋值
      (3).宏嵌套html/其它内容:宏嵌套html/其它内容使用<#nested>指令,在宏定义/体中用<#nested>指令将调用宏时的html/其它内容嵌套到<#nested>指令所在的位置,调用宏时
          在调用宏体中输入html/其它内容即可嵌套到宏体中,如:
            定义时加入<#nested>指令将嵌套内容加入到<#nested>指令处:<#macro 宏名>
                 <table border=4 cellspacing=0 cellpadding=4><tr><td>
                   <#nested>
                            </tr></td></table>
                     </#macro>
            调用时在调用宏体中加入要嵌套的内容:<@宏名>嵌套内容</@宏名>,输出:<table border=4 cellspacing=0 cellpadding=4><tr><td>嵌套内容</tr></td>< /table>


   n.ftl中的其它用法:
     取值:${4个范围内的非int型的任意对象},#{4个范围内的int型变量}
     ftl中调用对象或action中的方法
       使用${对象.方法}调用对象的方法
       使用${action.方法名}调用当前action中的方法
     支持其它语言一样的转义序列:\g:大于号、\l:小于号、\":双引号、\':单引号、\\:反斜杠、\n:换行、\r:Return、\t:Tab(制表符)、\b:Backspace(退格)、\f:Form feed、\a:&、\{:{
     注释使用<#-- 注释内容 -->

分享到:
评论

相关推荐

    freemarker学习资料汇总

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

    FreeMarker学习资料整理

    FreeMarker是一款强大的、开源的模板引擎,主要用于生成动态HTML、XML或其他格式的文本输出,...从基础语法到实际应用,都需要我们不断学习和实践。提供的学习资料将帮助初学者快速上手,逐步掌握FreeMarker的精髓。

    freemarker资料汇总

    最后,基础语法的文本文件《Freemarker基础语法.txt》和《Freemarker学习归纳 .txt》是对Freemarker核心语法的精炼总结,方便初学者快速入门。这些文件可能包括变量、表达式、控制流、注释等基本元素,是学习...

    freemarker及jeecms标签使用学习文档

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

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

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

    freemarker_jar包及文档

    1. **Freemaker_入门+深入+开发指南+学习笔记.doc**:这份文档通常包含了Freemarker的基础概念、快速入门教程、进阶技巧以及开发实践指导。通过阅读,我们可以了解到如何创建模板、变量的使用、控制结构(如if/else...

    java私人学习笔记

    Java私人学习笔记主要涵盖了Java编程语言以及与其相关的几个著名框架——Spring、Struts2和Hibernate,还有前端开发中常用的JavaScript。这些技术在IT行业中的应用广泛,是许多企业级应用开发的基础。以下是对这些...

    Freemaker_入门+深入+开发指南+学习笔记

    本资源包“Freemaker_入门+深入+开发指南+学习笔记.doc”显然是一份详尽的Freemaker学习资料,涵盖了从基础概念到高级特性的全面讲解。 一、Freemaker入门 1. **安装与配置**:首先,你需要将Freemaker库添加到你...

    Struts2.1学习笔记

    ### Struts2.1学习笔记 #### Struts2的来源与优点 - **来源**:Struts2是在WebWork2的基础上发展起来的,它继承了WebWork2的优点,并且进行了改进,使其更适合现代Web应用程序的需求。与Struts1相比,Struts2的...

    web学习笔记.pdf

    Web技术的学习笔记涵盖了从基础的JSP引擎工作原理到高级的框架如Struts1和Struts2的使用。首先,JSP(JavaServer Pages)是Java平台上的动态网页技术,当Web容器接收到以JSP为扩展名的URL请求时,会交由JSP引擎处理...

    struts2学习笔记

    ### Struts2 学习笔记 #### 一、Struts2 概览及发展历程 **Struts2** 是一个开源的 Java Web 应用框架,它继承了 **Struts1** 的优秀特性,并在此基础上进行了大量的改进和扩展。**Struts2** 的发展可以追溯到 **...

    Spring Boot 学习笔记完整教程.docx

    这个学习笔记的完整教程将涵盖多个关键领域,帮助开发者深入理解和使用 Spring Boot。 1. **Spring Boot 教程** - **基础入门**:了解 Spring Boot 的核心理念,包括自动配置、起步依赖和独立运行的特性。 - **...

    freemaker全部资料

    "freemaker学习笔记"很可能是对Freemarker语法和使用技巧的详细讲解,包括但不限于变量、指令、函数、宏定义、模板继承和导入等。这些笔记对于初学者来说是宝贵的参考资料,能帮助快速掌握Freemarker的基本用法。 ...

    javaScript笔记

    综上所述,这篇JavaScript笔记涵盖了从基础语法到高级特性的全面学习,同时也涉及到了与之相关的工具和技术,如模板引擎Freemarker和开发环境的构建。通过深入理解和实践这些知识点,开发者可以提升JavaScript编程...

    struts2笔记1

    初级阶段主要掌握基础语法和面向对象编程;中级阶段则需要深入理解面向对象的思想,如何将其应用在实际开发中;高级阶段则涉及业务逻辑的理解和实现,以及框架的底层工作原理。 Struts2框架的诞生是为了解决Model1...

    struts2笔记

    Struts2是一个基于MVC设计模式的Java EE框架,它主要用于构建企业级Web应用程序。这个框架简化了开发过程,提供了一...同时,Struts2的灵活性允许在项目中逐步引入,降低了学习曲线,使其成为Java EE开发中的流行选择。

    java从入门到精通笔记

    ### Java从入门到精通知识点梳理 #### 一、Java核心概念 **1. 环境搭建** - **Java的历史**: Java由...以上是从Java基础知识到高级应用的全面梳理, 旨在帮助学习者建立坚实的技术基础, 并逐步深入到实际项目开发中。

    SpringBoot(入门篇)资料.rar

    总的来说,这份压缩包提供了SpringBoot入门所需的基本概念、实践示例和学习笔记,对于希望了解和学习SpringBoot的人来说是一份宝贵的资源。通过深入理解和实践这些内容,你可以掌握SpringBoot的核心特性,并能快速...

Global site tag (gtag.js) - Google Analytics