您的位置:首页 > 其它

制作网页---Freemarker小节

2016-04-27 21:20 204 查看
1.什么是Freemarker

FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。

在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。

上个图



模板+数据模型=输出

2.数据类型

请注意,这里讲的是数据类型而上面说的是数据模型+模板=输出

在freemarker中,数据模型特指一个以root为根节点的哈希表,这个表中的所有数据,都是从Java后台传过来的。

而但是在模板中,也是可以定义数据的,这两种来源(Java后台与模板创建)的数据本质上没有区别,我们可以统称其为变量,变量具有以下类型:

(1)标量

①字符串

②数字

③日期

④布尔值

以上的类型分别对应Java里面的

java.lang.String

java.lang.Number

日期暂时无对应

java.lang.Boolean

(2)矢量/容器

容器的作用就是用来存放其他变量

①序列

java.util.List 或Java数组

②散列/哈希

java.util.Map或用户自定义的JavaBean

(3)子程序

①方法

利用Java反射机制传递过来的位于数据模型的变量

②函数

利用指令function创建的变量

③用户自定义指令

利用指令macro创建的变量

注:

①许多有实用功能的内建函数是依附于标量变量来调用的。

假设有标量x,且有内建函数method,调用方式是x?method

②子程序也像函数式编程一样,在程序之中处于第一等地位。

③方法与函数也只是来源不同,调用方式是通过插值,${expression}

而用户自定义指令的调用方式却类似于指令,假如有名为method的自定义指令,调用方式为<@method>xxxxx</@method>

3.模板

(1)文本

即html语言,这个按照原样输出

(2)插值

即${expression}

(3)FTL标签/指令

比如<#list> xxxxxxx <./#list>

或者用户自定义标签<@method> xxxxxxx </@method>

(4)注释

<#-- 这就是注释 -->

4.其他

(1)常用指令

①条件语句

可以说是一目了然,其中#else是可选的

<#if predict>

语句1

<.#else>

语句2

<./#if>

②循环语句

这里面的循环类似于C++11的范围for

<#list sequences as element>

${element}的语句

</#list>

③包含语句

<#include "xxxx.ftl">

包含另一段ftl代码

(2)不存在变量

这里说的不存在的意思既包括没有定义,也包括变量值为null,假设变量为x,处理方式有

①提供默认值

${x}!"xxx"

即如果x不存在,就提供默认值"xxx"

②提前判断

<#if x??>xxxxxxxx</#if>

即如果x不存在,整个语句都不会起作用。

(3)插值注意事项

①作用范围

A。文本区

比如,<h1> Hello ${name} </h1>

B。字符串表达式

比如,<#include "/footer/${company}.html">

②插入自动转换

我们知道,变量有:数字、字符串、日期、布尔 4种类型

插入到文本区,都是要转换为字符串,可能够自动转换的类型有,数字和字符串。

A。日期的转换,需要借助内建函数date、time、datetime来帮助freemarker转换

B。布尔的转换,需要借助内建函数string,比如${married?string("true","false")}当然也可以这样${married?string("yes","no")}

③转意处理

这个目的是为了防止跨站脚本攻击之类的。

使用escape指令,比如

<#escape x as x?html>

...

<p>Title: ${book.title}</p>

<p>Description: <#noescape>${book.description}</#noescape></p>

<h2>Comments:</h2>

<#list comments as comment>

<div class="comment">

${comment}

</div>

</#list>

...

</#escape>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: