您的位置:首页 > 其它

freemarker语法笔记

2017-10-26 17:11 141 查看
 

                        FreeMarker的基础知识整理

 

 

1、Freemarker概念

Freemarker不是web开发的应用程序框架,它是适用于web应用程序框架中的组件。

    FreeMarker引擎本身不知道HTTP协议或者Java Servlet的存在。所以它也可以用于非      web应用程序的开发环境

 

2、模板+数据模型 = 输出

*模板:

             静态的HTML代码+FreeMarker指令元素

    *数据模型:

              来自java对象

    *输出:

         模板存放在web服务器上,当有人来访问这个页面时,FreeMarker将会动转换              模板,生成普通的HTML文本并发送结果到访问者的Web浏览器中去显示

 

3、变量:

      1)哈希表变量:

可以访问子变量名称

                              *指定值:

    {"name":"mouse","age":128},键的类型为字符串,如                   "name","age"

                              *检索:

                                    hash.name,hash.age

                              *连接:

  使用+来连接两个哈希表,如果两个哈希表含有相同键的项,

                          那么+右侧的哈希表中的项优先

                                  <#assign ages ={"joe":23,"fred":24}+{"joe":20,"julia":30}>

                          最后ages.joe=20

      2)序列变量:

                 按顺序存储子变量,使用数字索引访问子变量

                        *指定值:

  ["foo","bar",123]

                        *检索:

seq[5]

                                 *切分:

seq[firstindex..lastindex]

                        seq[10..19]表达式会是包含第11个至第20个元素的序列,                                                        lastindex可以省略,这样seq[10..]表示包含第11个至最后一个                                          元素的序列

      

 

      3)标量:

                       仅存储单值的变量

            *字符串:

                                    *指定值:

 "aaa"或者'aaa'

                     *检索:

   获取一个字符name[0]

                                 *连接:

   "aaa"+"bbb"

                                 *原生字符串:

                                                     一些特殊的符号没有特殊意义,前面加r,

                                                 例如${r"${foo}"}会打印${foo}

            *数字:

                   *指定值:

   123.45

            *日期/时间:

                       *指定值:

            *布尔值:

                                         *指定值:

 true,false

      

6、在模板中要访问子变量,需要从根开始指定路径,每级用点来分隔。

 

7、FreeMarker模板(FTL)的特殊部分:

     1)插值:

                    ${表达式}

              *使用:

                        *文本:

  <h1>Hello${name}!</h1>

                        *字符串:

<#include "/footer/${company}.html">

                  *表达式的结果:

                                         *字符串插值:

                                                    当插值在文本区,放在escapse指令中,被插                                                                                入的字符串(HTML)会被自动转义

                                                    <#escape x asx?html>

                                                    <p>${book}</p><!--如&会被转义为&>

                                                    <p><#noescape>${pencil}</#noescape></p>

                                                </#escape>

                                                 *数字插值:

                                                                         使用number_format设置格式

                                                                         使用string重写默认格式

 

 

                                                 *日期/时间插值:

                                                                                使用time_format,date_format,datetime_format                                                                             设置转换格式

                                                                                使用string重写默认格式

                                                 *布尔插值:

                                                                         布尔类型的变量不能直接放进${}中,需要                                                                                  ${user?string("yes","no")}

 

     2)FTL标签(指令):

                  以#符号开头,自定义的标签以@开头,

                  标签不可以在其他标签和插值中使用

 

     3)注释:

              <#--和-->可以放在标签和插值中间

              ${user<#--the name-->}

               <#list <#--some comment-->>

 

8、指令:

      1)if指令:

                 <#if condition>...</if>

                当condition条件为false时,if标签之间的内容会被忽略

      2)if else指令:

                    <#if condition>

                      aaaaaaaa;

                    <#else>

                      bbbbbbb;

                    </#if>

                   使用<#else>标签可以指定condition为false时执行的程序

      3)list指令:

                  <#list sequence as loopVariable>

                     语句;

                  </#list>
      4)include指令:

                    <#include "aaa.html">

 

9、处理不存在的变量:(变量不存在或者为null)

      1)指定默认值:

                     ${(bianliang ! "aaa")}

                    当bianliang不存时指定bianliang="aaa",最好是使用括号,

                         如果默认值被省略了,那么结果将会是空串,空序列或空哈希表,

                         但是如果想让默认值为0或者false,则需要指定,不能省略。

                     多级访问变量问题:

                      1)animals.pig.price!0

                         animals和pig变量都需要存在才会给price赋默认值,

                         否则程序报错

                      2)(animals.pig.price)!0

                         animals和pig变量不存在时表达式结果也为0

 

      2)if询问:

                 <#if bianliang??>               

 

10、方法和函数:

              方法来自于数据模型(反射了java对象的方法)

              函数是定义在模板里的,使用函数指令

11、算数运算:

           *加法:+

                *减法:-

                *乘法:*

                *除法:/

                *求模(求余):%

 

12、比较运算:

           比较运算两边的表达式结果为数字类型

                *相等:=

                *不等:!=

                        <  (lt)

                          <=  (lte)

                           >   (gt)

                           >=  (gte)

               *但是<和>需要放在()中,否则和FTL标签冲突

 

13、逻辑操作:

                 逻辑操作两边的表达式结果为布尔类型

                 *逻辑或:||

                 *逻辑与:&&

                 *逻辑非:!

 

14、内建函数:

         内建函数提供变量的不同形式和其它信息。

                *字符串使用的内建函数:

                                                   *html:

                                       字符串中所有的特殊HTML字符都需要用实                                                                     体引用来代替。

                                                   *cap_first:

       第一个字母变为大写。

                                                   *lower_case:

 字符串小写形式。

                                                    

*upper_case:

 字符串大写形式。

                                                    *trim:

去掉字符串首尾的空格。

                                                    *string:

 设置输出格式。

                  *序列使用的内建函数:

                                                  Size:

  序列中元素的个数。

                  *数字使用的内建函数:

                                                  int:

 数字的整数部分。

 

15、模板中定义的变量:

                            *简单变量:

       能从模板中的任何位置来访问,或者从使用include指令              引入的模板访问。

                                            可以使用assign或macro指令来创建或替换这些变量

                                       *创建变量:

 <#assign x=1>

                                           *替换变量:

 <#assign x=x+3>

 

                                    *局部变量:

                                          设置在宏定义体内,只在宏内可见。生存周期只是宏的                                                      调用过程。可以使用local指令在宏定义体内创建或者替                                                          换局部变量

 

                                   *循环变量:

  由指令(如list)自动创建,只在指令的开始和结束标记内            有效。

 

                                   *隐藏变量:

                                                    *模板中定义的变量隐藏数据模型中的变量

                                                    *局部变量隐藏同名的简单变量

                                                    *循环变量隐藏同名的局部变量和简单变量

                                                    *内部循环变量隐藏外部循环变量

 

 

 

 

 

 

 

                                                    <#assign x="aaa">

                                                           ${x}                  <#--普通变量-->

                                                      <#list["loop"] as x>

                                                              ${x}             <#--循环变量-->

                                                                  <#assignx="bbb">  <#--普通变量-->

                                                                      ${x}             <#--循环变量-->

                                                         </#list>

                                                         ${x}                  <#--普通变量-->

                                               <#localx="local">

                                                     ${x}              <#--局部变量-->

                                                        <#list ["loo"] as x>

                                                                                        ${x}          <#--循环变量x-->

                                                                          </#list>

                                                                          ${x}             <#--局部变量-->

                                                            </#local>

 

 

 

 

 

 

                       

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: