首页 > 代码库 > Freemarker的基本语法及入门基础

Freemarker的基本语法及入门基础

哈哈   原谅楼主的懒惰  剩下的假期过完再来补

一、freemarker模板文件(*.ftl)的基本组成部分
        1. 文本:直接输出的内容部分
        2. 注释:不会输出的内容,格式为<#--  注释内容  -->
        3. 取值(插值):代替输出数据模型的部分,格式为${数据模型}或#{数据模型}
        4. ftl指令:Freemarker指令,类似于HTML标记。
                             内建指令:开始标签:<#directivename parameter>       结束标签:</#directivename>      空标签:<#directivename parameter/>   
                             自定义指令:开始标签:<@directivename parameter>       结束标签:</@directivename>      空标签:<@directivename parameter/>
                             至于什么是内建指令,什么是自定义指令   我会在下面叙述到。

二、Freemarker语法及使用方法
        1. 取值(插值)指令及适用类型:
                (1) ${var}
                        适用类型:java中常用的八大基本类型以及我们的String引用类型,但是,freemarker中boolean类型显示时true==yes  false==no
                        示例:
                                在后台文件中定义变量
                                        String strVar = "世界你好";
                                        int intVar = 10;
                                        boolean booVar = true;
                                在页面中获取变量:
                                        String获取:<font color="red"> ${strVar} </font><br>
                                        int获取:<font color="red"> ${intVar} </font><br>
                                        boolean获取:<font color="red"> ${booVar?string("yes","no")} </font>
                                展示结果:
                                        String获取:世界你好
                                        int获取:10
                                        boolean获取:yes
                (2)${var!}
                        适用类型:对 null 或者不存在的对象进行取值,可以设置默认值,例:${var!‘我是默认值‘}    即,有值时显示正常值,无值时显示默认值
                        示例:
                                在后台文件中定义变量
                                        String strVar = "世界你好";
                                        String str = null;
                                在页面中获取变量:
                                        String获取:<font color="red"> ${strVar!"我是空"} </font><br>
                                        str获取:<font color="red"> ${str!} </font><br>
                                        str获取:<font color="red"> ${str!"默认"} </font><br>
                                展示结果:
                                        String获取:世界你好
                                        str获取:
                                        str获取:默认
                (3)${封装对象.属性}
                        适用类型:对封装对象进行取值,例:${User.name}
                        示例:
                                在后台文件中封装对象User
                                        String name = "姓名";
                                        int age = 18;
                                在页面中获取变量:
                                        name获取:<font color="red"> ${User.name} </font><br>
                                        age获取:<font color="red"> ${User.age} </font><br>
                                展示结果:
                                        name获取:姓名
                                        age获取:18
                (4)${date?String(‘yyyy-MM-dd‘)}
                        适用类型:对日期格式进行取值,在这里我要强调的是,定义Date类型的变量时,java.util.Date无法输出日期,须使用java.sql.Date
                        示例:
                                在后台文件中定义变量
                                        java.sql.Date date = new Date().getTime();
                                        java.sql.Date time = new Date().getTime();
                                        java.sql.Date datetime = new Date().getTime();
                                在页面中获取变量:
                                        date获取:<font color="red"> ${date?string(‘yyyy-MM-dd‘)} </font><br>
                                        time获取:<font color="red"> ${date?string(‘HH:mm:ss‘)} </font><br>
                                        datetime获取:<font color="red"> ${date?string(‘yyyy-MM-dd HH:mm:ss‘)} </font><br>
                                展示结果:
                                        name获取:姓名
                                        age获取:18
                (5)${var?html}
                        适用类型:转义HTML内容
                (6)<#assign num = 100 />
                        适用类型:定义变量,支持计算和赋值
                (7)对List集合进行取值
                        <#list  list集合  as  item>
                               ${item.username}    --取值
                        </#list>
                (8)对Map集合进行取值
                        <#list map?keys as key>
                               ${key}:${map[key]}
                        </#list>
        2. 条件判断指令:
                (1) if
                        格式:<#if 条件>
                                        输出
                                     </#if>
                (2) if - else
                        格式:<#if 条件>
                                        输出
                                    <#else>
                                        输出
                                    </#if>
                (3) if - elseif - else
                        格式:<#if 条件1>
                                        输出
                                    <#elseif 条件2>
                                        输出
                                    <#else>
                                        输出
                                    </#if>
                (4) switch
                        格式:<#switch var>
                                    <#case 条件1>
                                          输出
                                    <#break>
                                    <#case 条件2>
                                          输出
                                    <#break>
                                    <#default>
                                          输出
                                    </#switch>
        3. 自定义函数、自定义指令:
                (1) 自定义函数
                        实现TemplateMthodModelEx
                (2) 自定义指令
                        实现TemplateDirectiveModel

        4.常用内建函数、macro(宏指令)、function(函数指令):
                (1) 常用内建函数
                        处理字符串:
                             substring                                          截取字符串,包头不包尾(下标)
                             cap_first                                          第一个字母大写
                             end_with                                           以什么字母结尾    
                             contains                                            是否包含目标字符串
                             date  datetime  time                       转换成日期格式
                             starts_with                                      以什么字母开头
                             index_of                                          返回某个指定的字符串值在字符串中首次出现的位置(下标)
                             last_index_of                                  获取指定字符出现的最后位置(下标)
                             split                                                  分隔
                             trim                                                  去两端空格
                        处理数字:
                             string                                              
                             x?string("0.##")                          变成小数点后几位
                             round                                              四舍五入
                             floor                                               去掉小数点
                             ceiling                                             近1   变成整数
                        处理list:
                              first:                                              取List值第一个值
                              last:                                                取List值最后一个值
                              seq_contains:                                是否包含指定字符
                              seq_index_of:                               指定字符所在位置
                              size:                                                集合大小
                               reverse:                                          集合倒序排列
                              sort:                                                对集合进行排序
                              sort_by:                                         根据某一个属性排序
                              chunk:                                            分块处理
                        其他:
                              is_string:                                      是否为字符类型
                              is_number:                                    是否为整数类型
                              is_method:                                   是否为方法
                              ():                                                  判断整个变量
                              has_content:                                判断对象是否为空或不存在
                              eval:                                           求值
                (2) macro(宏指令)
                (3) function(函数指令)
               

Freemarker的基本语法及入门基础