freemarker介绍

 

                            freemarker简介

 首先我们在学习FreeMarker之前我们首先要了解FreeMarker是做什么的?

 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,

 使用纯Java编写。

 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的

应用程序。虽然FreeMarker具有一些编程的能力,

 但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过

模板显示准备的数据,通俗一点来讲,FreeMarker就是一种基于模板的

 用来生成输出文本的通用工具,基于Java的开发包和类库用来生成输

出文本的通用工具,基于Java的开发包和类库。

 讲了这么多,那么FreeMarker到底如何使用,它的优点儿在哪儿,我

们为什么要使用它

 接下来,根据我这一段时间的学习及在项目中的应用下面对

FreeMarker的认知,做一个简单的介绍:

1.为什么要用freemarker?它的特性有哪些?

        微笑  特性:  

       1).分离表现层和业务逻辑

           使用JSP开发过程中在页面中大量的存在业务逻辑的代码,使得页

面内容凌乱,在后期大量的修改维护过程中就变得非常困难

           FreeMarker根本不支持Java脚本代码,而是使用el表达式来输出展

示数据。FreeMarker的设计初衷就是:。模板+数据模型=输出,

     模板只负责数据在页面中的表现,不涉及任何的逻辑代码,而所有的逻

辑都是由数据模型来处理的。

          用户最终看到的输出是模板和数据模型合并后创建的。
        2).智能的国际化和本地化

           字符集智能化(内部使用UNICODE)、数字格式本地化敏感、日期

和时间格式本地化敏感、非US字符集可以用作标识(如变量名)

     多种不同语言的相同模板
        3).提高开发效率

           在我们以往的开发中,使用的都是JSP页面来展示数据的,即所谓的

表现层。我们都知道,JSP在第一次执行的时候需要转换成Servlet类,

     开发阶段进行功能调适时,需要频繁的修改JSP,每次修改都要编译和转

换,那么试想一天中我们浪费在程序编译的时间有多少。

     相对于JSP来说,FreeMarker模板技术不存在编译和转换的问题,所以就

不会存在上述问题。而且开发过程中,

          我们在不必在等待界面设计开发人员完成页面原形后,我们再来开发程序。
        4). 分工明确

           以往用JSP展现数据时,程序员并不熟悉界面设计技术,反之界面开发

人员,也并不熟悉程序语言。协调工作很困难

      使用FreeMarker后,作为界面开发人员,只专心创建HTML文件、图像以及

Web页面的其他可视化方面,不用理会数据;

            而程序开发人员则专注于系统实现,负责为页面准备要显示的数据。

首先我们来对Freemarker有一个初略的认识,在这一章中,我们要学会如何写出

一个简单但是非常有效的Freemarker模板。

模板 + 数据类型 = 输出

 

2.freemarker模板文件组成

 

①、文本,直接输出的部分
②、注释,即<#--...-->格式不会输出
③、FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出
④、插值(Interpolation):即${..}或者#{..}格式的部分,将使用数据模型中的部分替代输出

 

   FTL指令规则:

 

FreeMarker有三种FTL标签,这和HTML的标签是完全类似的 开始标签:<#directivename parameters> 结束标签:</#directivename> 空标签: <#directivename parameters />

实际上,使用标签时前面的#符号也可能变成@,如果该指令是一个用户指令而

不是系统内建指令时,应将#符号改为@符号。

   

     插值规则:  

 

FreeMarker的插值有如下两种类型
1、通用插值:${expr}
2、数字格式化插值:#{expr}或者#{expr;format}

 

   3.表达式:

 

 

  表达式是FreeMarker的核心功能。表达式放置在插值语法(${...})之中时,

表面需要输出表达式的值,表达式语法也可以与FreeMarker标签结合,用于控制输出

1、直接指定值 a、字符串: ${"我的文件保存在d\\"}; b、数值 c、布尔值 d、日期型

FreeMarker支持datetimedatetime三种类型,这三种类型的值无法直接

指定,通常需要借助字符串的datetimedatetime三个内建函数进行转换才可以

<#assigntest1 = "2015-01-22"?date("yyyy-MM-dd")/>;   <#assign test2="16:34:43"?time("HH:mm:ss") />   <#assigntest2 = "2015-01-2217:23:45"?datetime("yyyy-MM-dd HH:mm:ss") />   ${test1?string.full} e、集合  集合以方括号包括,各集合元素之间以英文逗号(,)分隔,看如下的示例:       <#list["星期一",,["星期二",["星期三",["星期四",["星期五"] as x>          ${s};         </#list> fMap集合

         Map对象使用花括号包括,Map中的key-value对之间以英文冒号(:)隔开,

多组key-value对之间以英文逗号(,)隔开:

<#assign score = {"语文":78,"数学":83,"Java":89} >     <#list score?key as x>      ${x}--->${score[x]};     </#list>   

 <spanstylespanstyle="font-family:sans-serif,arial,verdana,trebuchet ms;

line-height:1.6em"> </span>  

2、输出变量值

       FreeMarker的表达式输出变量时,这些变量可以是顶层变量,也可以是

Map对象中的变量,还可以是集合中的变量,并可以使用点(.)语法来访问Java对象的属性

      a、顶层变量 Map root = newHashMap();   root.put("name","wenchao");  

       对应顶层变量,直接使用${variableName}来输出变量值,变量名只能是

数字、字母、下划线、$@#的组合,并不能以数字开头

     b、输出集合元素

       如果需要输出集合元素,则可以根据集合元素的索引来输出元素。集合元

素的索引以方括号指定。

       假设有集合对象为:["星期一","星期二","星期三","星期四","星期五","星期六"],

该集合对象名为week,如果需要输出星期三,则可以使用如下语法:

     ${week[2]}        集合里的第一个元素的索引是0     c、输出Map元素

         这里的Map对象可以是直接HashMap的实例,甚至包括JavaBean实例,对

JavaBean实例,我们一样可以把其当成属性为key,属性为valueMap实例         

 3、空值处理运算符

        FreeMarker对空值的处理非常严格,FreeMarker的变量必须有值,没有被赋

值的变量就会抛出异常。    

4listmap操作、运算符

 

 

4.freemarker常用指令:

 

 

 1if指令 <#if(columns?size>10)>   <#ifpo_index%2==0>   ….   </#if>   <#else>   …   </#if>   2switchcasedefaultbreak指令

     虽然FreeMarker提供了switch指令,但它并不推荐使用switch指令来控制也

输出,而是推荐使用FreeMarkerif..elseif..else指令来替代它。

3listbreak指令

    list指令时一个典型的迭代输出指令,用于迭代输出数据模型中的集合。list

令的语法格式如下:

<#list sequenceas item>     ...   </#list>         除此之外,迭代集合对象时,还包括两个特殊的循环变量:             aitem_index:当前变量的索引值。             bitem_has_next:是否存在下一个对象             也可以使用<#break>指令跳出迭代  4include指令

        include指令的作用类似于JSP的包含指令,用于包含指定页,include

指令的语法格式如下

         <#include filename [options]          在上面的语法格式中,两个参数的解释如下           afilename:该参数指定被包含的模板文件

          boptions:该参数可以省略,指定包含时的选项,包含encoding

parse两个选项,encoding指定包含页面时所使用的解码集,而parse指定被

            包含是否作为FTL文件来解析。如果省略了parse选项值,则该选项值默认是true 5 import指令

       该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定

Map对象中,import指令的语法格式如下

        <#import path as mapObject>

       在上面的语法格式中,path指定要被导入的模板文件,而mapObject

一个Map对象名,通过这行代码,将导致path模板中的所有变量都被放置

       mapObject         <#import "/lib/common.ftl"as com> 6noparse指令

         noparse指令指定FreeMarker不处理该指令里包含的内容,该指令

的语法格式如下:

<#noparse>      ...   </#noparse>   7assign指令        它用于为该模板页面创建或替换一个顶层变量  8setting指令        该指令用于设置FreeMarker的运行环境,该指令的语法格式如下:         <#setting name = value>         name的取值范围包括如下几个          locale:该选项指定该模板所用的国家/语言选项          number_format:该选项指定格式化输出数字的格式          boolean_format:该选项指定两个布尔值的语法格式,默认值是"truefalse"         date_format,time_format,datetime_format:该选项指定格式化输出日期的格式          time_zone: 设置格式化输出日期时所使用的时区  ------------------------------------------------------------------------------------------------------------------------------------------------------      以上,是简单的freemaker的使用,通过使用freemaker帮助我们更便捷的开发。

 

 

   

                   
                 
                 
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   

 

     

  

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章