服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

freemarker设计指南(3)

3、模板

1)整体结构

l         模板使用ftlfreemarker模板语言)编写,是下面各部分的一个组合:

Ø         文本:直接输出

Ø         interpolation:由${},或#{}来限定,计算值替代输出

Ø         ftl标记:freemarker指令,和html标记类似,名字前加#予以区分,不会输出

Ø         注释:由<#---->限定,不会输出

l         下面是以一个具体模板例子:

<html>[br]
<head>[br]
  <title>welcome!</title>[br]
</head>[br]
<body>[br]
  <#-- greet the user with his/her name -->[br]
  <h1>welcome ${user}!</h1>[br]
  <p>we have these animals:[br]
  <ul>[br]
  <#list animals as being>[br]
    <li>${being.name} for ${being.price} euros[br]
  </#list>[br]
  </ul>[br]
</body>[br]
</html>  

l         [br]是用于换行的特殊字符序列

l         注意事项:

Ø         ftl区分大小写,所以list是正确的ftl指令,而list不是;${name}${name}是不同的

Ø         interpolation只能在文本中使用

Ø         ftl标记不能位于另一个ftl标记内部,例如:

<#if <#include 'foo'>='bar'>...</if>

Ø         注释可以位于ftl标记和interpolation内部,如下面的例子:

<h1>welcome ${user <#-- the name of user -->}!</h1>[br]
<p>we have these animals:[br]
<ul>[br]
<#list <#-- some comment... --> animals as <#-- again... --> being>[br]
...  

Ø         多余的空白字符会在模板输出时移除

2)指令

l         freemarker中,使用ftl标记引用指令

l         有三种ftl标记,这和html标记是类似的:

Ø         开始标记:<#directivename parameters>

Ø         结束标记:</#directivename>

Ø         空内容指令标记:<#directivename parameters/>

l         有两种类型的指令:预定义指令和用户定义指令

l         用户定义指令要使用@替换#,如<@mydirective>...</@mydirective>(会在后面讲述)

l         ftl标记不能够交叉,而应该正确的嵌套,如下面的代码是错误的:

<ul>
<#list animals as being>
  <li>${being.name} for ${being.price} euros
  <#if use = "big joe">
     (except for you)
</#list>
</#if> <#-- wrong! -->
</ul>  

l         如果使用不存在的指令,freemarker不会使用模板输出,而是产生一个错误消息

l         freemarker会忽略ftl标记中的空白字符,如下面的例子:

<#list[br]
  animals       as[br]
     being[br]
>[br]
${being.name} for ${being.price} euros[br]
</#list    >  

l         但是,<</和指令之间不允许有空白字符

3)表达式

l         直接指定值

Ø         字符串

n         使用单引号或双引号限定

n         如果包含特殊字符需要转义,如下面的例子:

${"it's /"quoted/" and
this is a backslash: //"}
 
${'it/'s "quoted" and
this is a backslash: //'} 

输出结果是:

it's "quoted" and
this is a backslash: /
 
it's "quoted" and
this is a backslash: / 

n         下面是支持的转义序列:

转义序列

含义

/"

双引号(u0022)

/'

单引号(u0027)

//

反斜杠(u005c)

/n

换行(u000a)

/r

return (u00