一、FreeMarker模板文件组成

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

②、注释,即<#--...-->格式不会输出

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

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

1、 FTL指令规则

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

开始标签:<#directivename parameters>

结束标签:</#directivename>

空标签: <#directivename parameters />

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

2、插值规则

FreeMarker的插值有如下两种类型

1、通用插值:${expr}

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

二、表达式

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

1、直接指定值

a、字符串: ${"我的文件保存在d:\\盘"};

b、数值

c、布尔值

d、日期型

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

 <#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>

f、Map集合

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

<#assign score = {"语文":78,"数学":83,"Java":89} >
<#list score?key as x>
${x}--->${score[x]};
</#list>
<spanstyle="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,属性为value的Map实例

3、空值处理运算符

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

4、list、map操作、运算符

三、FreeMarker的常用指令

1、if指令

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

</#if>

2、switch、case、default、break指令

虽然FreeMarker提供了switch指令,但它并不推荐使用switch指令来控制也输出,而是推荐使用FreeMarker的if..elseif..else指令来替代它。

3、list、break指令

list指令时一个典型的迭代输出指令,用于迭代输出数据模型中的集合。list指令的语法格式如下:

<#list sequenceas 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、assign指令

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

8、setting指令

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

<#setting name = value>

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

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

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

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

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

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

------------------------------------------------------------------------------------------------------------------------------------------------------

以上,是简单的freemaker的使用,通过使用freemaker帮助我们更便捷的开发。

freemarker<二>的更多相关文章

  1. spring源码分析之freemarker整合

    FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是一个Java类库,是一款程 ...

  2. Maven 整合FreeMarker使用

    pom.xml <!-- freemarker jar --> <dependency> <groupId>org.freemarker</groupId&g ...

  3. JAVA FreeMarker工具类

    FreeMarkerUtil.java package pers.kangxu.datautils.utils; import java.io.File; import java.io.StringW ...

  4. FreeMarker:怎么使用

    第一个FreeMarker程序 1. 建立一个普通的java项目:testFreeMarker 2. 引入freemarker.jar包 3. 在项目目录下建立模板目录:templates 4. 在t ...

  5. FreeMarker的基础语法

    FreeMarker语言 FreeMarker语言概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写. FreeMarker被设计用来生成HTML Web ...

  6. freemarker页面中文乱码

    一.前言 简单的记录freemarker遇到的错误问题:ftl页面中文乱码 由于freemarker整合在ssm框架中,所以笔者直接贴配置代码 <beans xmlns="http:/ ...

  7. Spring 4 使用Freemarker模板发送邮件&添加附件

    前言 Spring对Java的邮件发送提供了很好的支持,提供了超级简单的API,大大简化了Java邮件发送功能的开发. Spring对Email的支持是基于JavaMail API开发的,所以,我们在 ...

  8. Freemarker 程序开发

    Freemarker 程序开发 现在web开发中,多使用freemarker 来描述页面.通常会使用的macro来定义各种组件,从而达到UI组件的复用.结合使用其它的指定,可快速的描述一个html页面 ...

  9. 第一个spring、springmvc、mybatis、freemarker项目小知识(一)

    1.持久层开发(Mybatis)    1.1 添加,非空字段必须给值,不是非空加判断,有值添加无值不添    1.2 删除,注意外键关系的级联删除.(事务传播行为)    1.3 更新,每个字段单独 ...

  10. myeclipse环境下开发freemarker

    最近在着手一个项目,其中就要使用到freemarker模版,当把html漂亮写完时,改写成freemarker时,问题来了.全屏都是白底黑色,没有高亮显示,没有语法提示,不能格式化.看着眼花,还容易出 ...

随机推荐

  1. 十年磨一剑,王坚自研的MaxCompute如何解决世界级算力难题

    摘要: 2009年这项关于大数据的技术长征开始.王坚带队,目标是自研大数据计算平台MaxCompute统一阿里巴巴内部的数据和大数据计算体系. 大数据时代,随着企业数据规模的急剧增长,传统软件已无法承 ...

  2. Gym - 101480D_Digit Division

    题意:输入n,m,将n分段,每一段都可以被m整除,有多少种方法. 题解:找到n最多可以分成多少段,1段1中分法,2段2中分法,3段4种分法--计算可知若有x段则2^x-1种分法. 注意:如果n无法被m ...

  3. Python中多线程与多进程的恩恩怨怨

    概念: 并发:当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运 ...

  4. Mybatis/Ibatis,数据库操作的返回值

    该问题,我百度了下,根本没发现什么有价值的文章:还是看源代码(详见最后附录)中的注释,最有效了!insert,返回值是:新插入行的主键(primary key):需要包含<selectKey&g ...

  5. 写给初学前端工程师的一封信 - 转载 至https://www.w3ctech.com/topic/983

    以下内容是转载https://www.w3ctech.com/topic/983 大家好: 应波波的邀请写一写我对这个话题的想法.从去年开始不少朋友让我帮忙介绍前端工程师,绝大部分忙都没帮上,原因是真 ...

  6. tomcat不能多次startup.sh,异常时直接,分析logs目录下的日志。

    tomcat不能多次startup.sh,异常时直接干掉其进程. 分析logs目录下的日志.

  7. codeforces1253F(图转换为树减少复杂度)

    题意: 给定一个无向图,其中1-k为充电桩,然后给定q个询问\(u_i, v_i\)(都是充电桩),然后问从其中一个充电桩到达另外一个充电桩需要最小的电池的容量. 每经过一条边都需要消耗一定的能量,到 ...

  8. SuperSocket SuperWebSocket并发数100限制的问题

    var wsSer = new WebSocketServer(); wsSer.NewMessageReceived += wsSer_NewMessageReceived;//有消息传入时事件 w ...

  9. TabHost选项卡的实现(二):使用Fragment实现

    在上一篇博客<TabHost选项卡的实现(一):使用TabActivity实现>中,讲解了如何使用TabActivity创建管理选项卡,但是,通过TabActivity创建选项卡的方式已经 ...

  10. 2018-6-11-WPF-Frame-的-DataContext-不能被-Page-继承

    title author date CreateTime categories WPF Frame 的 DataContext 不能被 Page 继承 lindexi 2018-06-11 10:48 ...