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[ name,  age ]
                                        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内容
                        示例:
                                在后台文件中封装变量Menu[ name, model ]
                                        Menu m = new Menu();
                                        m.setName(" freemarker ");
                                        m.setModel("<font color = 'red'>我只是个菜单</font>");
                                在页面中获取变量:
                                        非转义获取:<font color="red"> ${m.model} </font><br>
                                        转义获取: ${m.model?html} </font><br>
                                展示结果:
                                        非转义获取:我只是个菜单
                                        转义获取:<font color = 'red'>我只是个菜单</font>
                (6)<#assign num = 100 />
                        适用类型:定义变量,支持计算和赋值
                        示例:
                                在页面中定义变量:
                                        <#assign num = 100 />
                                        num获取:<font color="red"> ${num)} </font><br>
                                        计算结果:<font color="red"> ${num * 10} </font><br>
                                展示结果:
                                        num获取:100
                                        计算结果:1000
                (7)对List集合进行取值
                        <#list  list集合  as  item>
                               ${item}    --取值
                        </#list>
                        示例:
                                在后台文件中定义变量
                                        List<String> strList = new ArrayList<String>();
                                        strList.add("第一个值");
                                        strList.add("第二个值");
                                        strList.add("第三个值");
                                在页面中获取变量:
                                        <#list  strList  as  item>
                                               ${item!}<br/>    --取值
                                        </#list>
                                展示结果:
                                        第一个值
                                        第二个值
                                        第三个值
                (8)对Map集合进行取值
                        <#list map?keys as key>
                               ${key}:${map[key]}
                        </#list>
                        示例:
                                在后台文件中定义变量
                                        Map<String, Object> m = new HashMap<String, Object>();
                                        m.put("name","姓名");
                                        m.put("age",18);
                                        m.put("sex","男");
                                在页面中获取变量:
                                         <#list m?keys as key>
                                                ${key}:${m[key]}
                                         </#list>
                                展示结果:
                                        name:姓名
                                        age:18
                                        sex:男
        2. 条件判断指令:
                (1) if
                        格式:<#if 条件>
                                        输出
                                     </#if>
                        示例:
                                在页面中定义变量并判断条件:
                                        <#assign age = 18 /><br>
                                        <#if age == 18>
                                                <font color="red"> age = 18</font>
                                        </#if>
                                展示结果:
                                        age = 18
                (2) if - else
                        格式:<#if 条件>
                                        输出
                                    <#else>
                                        输出
                                    </#if>
                        示例:
                                在页面中定义变量并判断条件:
                                        <#assign age = 20 /><br>
                                        <#if age == 18>
                                                <font color="red"> age = 18</font>
                                        <#else>
                                                <font color="red"> age != 18</font>
                                        </#if>
                                展示结果:
                                        age != 18
                (3) if - elseif - else
                        格式:<#if 条件1>
                                        输出
                                    <#elseif 条件2>
                                        输出
                                    <#else>
                                        输出
                                    </#if>
                        示例:
                                在页面中定义变量并判断条件:
                                        <#assign age = 20 /><br>
                                        <#if age &gt; 18>
                                                <font color="red">青年</font>
                                        <#elseif age == 18>
                                                <font color="red"> 成年</font>
                                        <#else>
                                                <font color="red"> 少年</font>
                                        </#if>
                                展示结果:
                                        成年
                (4) switch  --常与case break default一起使用  参数可为字符串
                        格式:<#switch var>
                                    <#case 条件1>
                                          输出
                                    <#break>
                                    <#case 条件2>
                                          输出
                                    <#break>
                                    <#default>
                                          输出
                                    </#switch>
                        示例:
                                在页面中定义变量并判断:
                                       <#switch var="星期一">
                                       <#case "星期一">
                                               油焖大虾
                                       <#break>
                                       <#case "星期二">
                                               炸酱面
                                       <#break>
                                       <#default>
                                               肯德基
                                       </#switch>
                                展示结果:
                                        油焖大虾
        3. 自定义函数、自定义指令:
                (1) 自定义函数
                        实现TemplateMthodModelEx
                (2) 自定义指令
                        实现TemplateDirectiveModel
                        示例:
                                <@自定义指令名称 入参(key-value格式) ; 出参(list格式)>
                                        运行条件
                                </@自定义指令名称>

                                PS:不同的返回值用逗号( , )间隔开

        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(宏指令)
                        调用:<@macro_name param />
                        语法:<#macro  变量名  参数>  
                                            <#nested/>  
                                    </#macro>
                (3) function(函数指令)
                        调用:${function_name(param)}
                        语法:<#function  变量名  参数>  
                                    <#return>  
                                    </#function>

Freemarker的基本语法及入门基础的更多相关文章

  1. (七)freemarker的基本语法及入门基础

    一.freemarker模板文件(*.ftl)的基本组成部分 1. 文本:直接输出的内容部分        2. 注释:不会输出的内容,格式为<#--  注释内容  -->         ...

  2. Objective-C基础语法快速入门

    Objective-C基础语法快速入门 2010-11-04 16:32 折酷吧 zheku8 字号:T | T 假如我们对面向对象的思维已经C语言都很熟悉的话,对于我们学习Objective-C将会 ...

  3. C#语法——反射,架构师的入门基础。

    前言 编程其实就是写代码,而写代码目的就是实现业务,所以,语法和框架也是为了实现业务而存在的.因此,不管多么高大上的目标,实质上都是业务. 所以,我认为不要把写代码上升到科学的高度.上升到艺术就可以了 ...

  4. Scala快速入门 - 基础语法篇

    本篇文章首发于头条号Scala快速入门 - 基础语法篇,欢迎关注我的头条号和微信公众号"大数据技术和人工智能"(微信搜索bigdata_ai_tech)获取更多干货,也欢迎关注我的 ...

  5. Markdown入门基础

    // Markdown入门基础 最近准备开始强迫自己写博文,以治疗严重的拖延症,再不治疗就“病入骨髓,司命之所属,无奈何”了啊.正所谓“工欲善其事,必先利其器”,于是乎在写博文前,博主特地研究了下博文 ...

  6. JavaScript入门基础

    JavaScript基本语法 1.运算符 运算符就是完成操作的一系列符号,它有七类: 赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,|=,&=).算术运 ...

  7. C++ STL编程轻松入门基础

    C++ STL编程轻松入门基础 1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL 1.2 追根溯源:STL的历史 1.3 千丝万缕的联系 1.4 STL的不同实现版本 2 牛刀小试 ...

  8. HTML入门基础教程相关知识

    HTML入门基础教程 html是什么,什么是html通俗解答: html是hypertext markup language的缩写,即超文本标记语言.html是用于创建可从一个平台移植到另一平台的超文 ...

  9. Python学习入门基础教程(learning Python)--5.6 Python读文件操作高级

    前文5.2节和5.4节分别就Python下读文件操作做了基础性讲述和提升性介绍,但是仍有些问题,比如在5.4节里涉及到一个多次读文件的问题,实际上我们还没有完全阐述完毕,下面这个图片的问题在哪呢? 问 ...

随机推荐

  1. servlet入门学习之生命周期

    一. 什么是Servlet Servlet是用Java语言编写的服务器端小程序,驻留在web服务器中,并在其中运行,扩展了web服务器的动态处理功能. 用java语言编写的java类 在web容器中运 ...

  2. scipy.optimize.minimize 解决实际问题

    接上博客问题http://www.cnblogs.com/shizhenqiang/p/8274806.html # coding=utf-8 from scipy import optimize i ...

  3. python_hello word!

    什么是编程? --模拟现实世界,跨时间,地点,不受外界坏境干扰到的虚拟现实世界,数字化的可定制化的世界 编程语言有哪些? python ,java,php  ,c++,等 python开发环境准备工作 ...

  4. mybatis传参的几种方式

    1,@Param @参考文章 @Select("select s_id id,s_name name,class_id classid from student where  s_name= ...

  5. sed的N;P用法

    sed的N;P用法 原文地址 这里介绍的是sed的一个多行模式的使用,一开始对sed中命令N的用法不是很理解,经过多次尝试,通过几个例子对N的用法进行总结: N即Next,它同n(next)的区别是: ...

  6. tomcat调优(三)

    标签: linux 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 1.安全优化 降权启动 telnet管理端口保护 ajp连接端口保护 禁用管理端 关闭本地默认 ...

  7. Struts2如何搭建?

    如何搭建Struts2:   1.导入jar包 commons-fileupload-1.3.jar commons-io-2.0.1.jar commons-lang3-3.1.jar freema ...

  8. Windows--查看使用某端口的进程

    场景: 有时候我们希望查找某个端口被那个进程使用,如何操作呢? 比如查找8000端口被按个进程使用? 首先使用netstat -ano |grep 8000查看 13776就是使用的进程ID 然后使用 ...

  9. Git Batch命令(转)

    echo 和 @ 回显命令 @ #关闭单行回显 echo off #从下一行开始关闭回显 @echo off #从本行开始关闭回显.一般批处理第一行都是这个 echo on #从下一行开始打开回显 e ...

  10. char a[]和char *a的比较

    指针和数组存在着一些本质的区别.当然,在某种情况下,比如数组作为函数的参数进行传递时,由于该数组自动退化为同类型的指针,所以在函数内部,作 为函数参数传递进来的指针与数组确实具有一定的一致性,但这只是 ...