FreeMarker基础讲解

Posted bingerger

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FreeMarker基础讲解相关的知识,希望对你有一定的参考价值。

 

技术图片

下载资源:www.yinxiangit.com

1. freemarker标签都是用<#标签>这样子命名的。

2.list该标签主要是进行迭代服务器端传递过来的List集合。

3. ${value}表示输出变量名的内容

4.if该标签主要是做if判断用的。

5.include该标签用于导入文件用的比如: <#include “include.html”/>
6.另外在静态文件中可以使用${} 获取值

freemarker自定义标签

Freemarker自定义标签就是自己写标签,然后自己解析,完全由自己来控制标签的输入输出,极大的为程序员提供了很大的发挥空间

FreeMarker图:

技术图片

一、基于步骤:      

1.以前写标签需要在<后加# ,但是freemarker要识别自定义标签需要在后面加上@,然后后面可以定义一些参数,当程序执行template.process(paramMap, out);,就会去解析整个页面的所有的freemarker标签。


2.自定义标签 需要自定义一个类,然后实现TemplateDirectiveModel,重写execute方法,完成获取参数,根据参数do something等等。


3.将自定义标签与解析类绑定在一起需要在paramMap中放入该解析类的实例,存放的key与自定义标签一致即可。

注意:在自定义标签中,如果标签内什么也没有,开始标签和结束标签绝对不能再同一行,不然会错 freemarker.log.JDK14LoggerFactory$JDK14Logger error

 

Freemarker标签使用:

Freemarker模板文件主要四个部分组成

1、文本,直接输出的部分

2、注释,即<#–…–>格式不会输出

3、插值(Interpolation):即${..}或者#{..}格式的部分,将使用数据模型中的部分替代输出

4、FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出

FTL指令规则:

FreeMarker有三种FTL标签,这和HTML的标签是完全类似的

开始标签:<#directivename parameters>

结束标签:</#directivename>

空标签: <#directivename parameters />

实际上,使用标签时前面的#符号也可能变成@,如果该指令是一个用户指令而不是系统内建指令时,应将#符号改为@符号

二、插值规则   

FreeMarker的插值有如下两种类型

1、通用插值:${expr}

2、数字格式化插值:#{expr}或者#{expr;format}

三、表达式   

表达式是FreeMarker的核心功能。表达式放置在插值语法(${…})之中时,表面需要输出表达式的值,表达式语法也可以与FreeMarker标签结合,用于控制输出

 1、直接指定值     

例如:

  a、字符串         ${‘我的名字是”yeek”‘};         ${“我的文件保存在d:盘”};

  b、数值

c、布尔值

d、日期型

FreeMarker支持date、time、datetime三种类型,这三种类型的值无法直接指定,通常需要借助字符串的date、time、datetime三个内建函数进行转换才可以


2.算术运算符  

       FreeMarker表达式中完全支持算术运算,FreeMarker支持的算术运算符包括: +,-,*,/,%

3.比较运算符 

 表达式中支持的比较运算符有如下几个 :

a、=(或者==):判断两个值是否相等.

b、!=:判断两个值是否不相等

c、 >(或者gt):判断坐标值是否大于右边值

d、 >=(或者gte):判断坐标值是否大于等于右边值

e、 <(或者lt):判断左边值是否小于右边值

f、 <=(或者lte):判断左边值是否小于等于右边值

4.逻辑运算符      

   逻辑运算符有如下几个:

a、逻辑与:&&

b、逻辑或:||

c、逻辑非:!

逻辑运算符只能作用于布尔值,否则将产生错误。

5.内建函数        

  FreeMarker还提供了一些内建函数来转换输出,可以在任何变量后紧跟?,?后紧跟内建函数,就可通过内建函数来转换输出变量

下面是常用的内建的字符串函数 

a、html:对字符串进行HTML编码

b、cap_first:将字符串第一个字母成大写

c、lower_case:将字符串转换成小写

d、upper_case:将字符串转换成大写

e、trim: 去掉字符串前后的空白字符

下面是集合的常用的内建函数        

  a、size: 获得序列中元素的数目

 下面是数字值的常用的内建函数     

   a、int 取得数字的整数部分


6、空值处理运算符        

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


四、FreeMarker常用指令语法

1.if指令分支控制语句代码如下:

<#if condition>

……

<#elseif condition2>

……

<#elseif condition3>

……

<#else>

……

<#if>

2、 switch 、 case 、 default 、 break指令

<#swithch value>

<#case refvalue>

…..

<#bread>

<#default>

……

</#switch>

3.list 、break指令

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

<#list sequence as item>

… …

</#list>


  除此之外,迭代集合对象时,还包括两个特殊的循环变量:

  a、item_index:当前变量的索引值。

    b、item_has_next:是否存在下一个对象      也可以使用<#break>指令跳出迭代

4、include 指令

include指令的作用类似于JSP的包含指令,用于包含指定页,include指令的语法格 式如下 :

<#include filename [options]

在上面的语法格式中,两个参数的解释如下

a、filename:该参数指定被包含的模板文件

b、options:该参数可以省略,指定包含时的选项,包含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>

6、noparse指令   

noparse指令指定FreeMarker不处理该指令里包含的内容,该指令的语法格式如下:

<#noparse>

   …

</#noparse>

7、escape、noescape指令      

8、assign指令  

它用于为该模板页面创建或替换一个顶层变量

9、setting指令   

该指令用于设置FreeMarker的运行环境,该指令的语法格式如下:

<#setting name = value>

name 的取值范围包括如下几个

  locale :该选项指定该模板所用的国家/语言选项

  number_format:该选项指定格式化输出数字的格式

  boolean_format:该选项指定两个布尔值的语法格式,默认值是”true、false”

date_format,time_format,datetime_format:该选项指定格式化输出日期的格式

time_zone:  设置格式化输出日期时所使用的时区

10、macro、nested、return指令

以上是关于FreeMarker基础讲解的主要内容,如果未能解决你的问题,请参考以下文章

FreeMarker的基础语法使用 && 心得和技巧

freemarker基础

Java基础之Freemarker模板加载及清空机制

简单的freemarker解析测试

Freemarker的基本语法及入门基础

Free 基础概念