Freemarker 开发指南.docx

上传人:b****5 文档编号:28930652 上传时间:2023-07-20 格式:DOCX 页数:25 大小:24.54KB
下载 相关 举报
Freemarker 开发指南.docx_第1页
第1页 / 共25页
Freemarker 开发指南.docx_第2页
第2页 / 共25页
Freemarker 开发指南.docx_第3页
第3页 / 共25页
Freemarker 开发指南.docx_第4页
第4页 / 共25页
Freemarker 开发指南.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

Freemarker 开发指南.docx

《Freemarker 开发指南.docx》由会员分享,可在线阅读,更多相关《Freemarker 开发指南.docx(25页珍藏版)》请在冰豆网上搜索。

Freemarker 开发指南.docx

Freemarker开发指南

Freemark开发指南

A概念

最常用的3个概念

sequence序列,对应java里的list、数组等非键值对的集合

hash键值对的集合

namespace对一个ftl文件的引用,利用这个名字可以访问到该ftl文件的资源

B指令

if,else,elseif

语法

<#ifcondition>

...

<#elseifcondition2>

...

<#elseifcondition3>

...

...

<#else>

...

用例

<#ifx=1>

xis1

<#ifx=1>

xis1

<#else>

xisnot1

switch,case,default,break

语法

<#switchvalue>

<#caserefValue1>

...

<#break>

<#caserefValue2>

...

<#break>

...

<#caserefValueN>

...

<#break>

<#default>

...

用例

字符串

<#switchbeing.size>

<#case"small">

Thiswillbeprocessedifitissmall

<#break>

<#case"medium">

Thiswillbeprocessedifitismedium

<#break>

<#case"large">

Thiswillbeprocessedifitislarge

<#break>

<#default>

Thiswillbeprocessedifitisneither

数字

<#switchx>

<#casex=1>

1

<#casex=2>

2

<#default>

d

如果x=1输出12,x=2输出2,x=3输出d

list,break

语法

<#listsequenceasitem>

...

<#ifitem="spring"><#break>

...

关键字

item_index:

是list当前值的下标

item_has_next:

判断list是否还有值

用例

<#assignseq=["winter","spring","summer","autumn"]>

<#listseqasx>

${x_index+1}.${x}<#ifx_has_next>,

输出

1.winter,

2.spring,

3.summer,

4.autumn  

 

include

语法

<#includefilename>

or

<#includefilenameoptions>

options包含两个属性

encoding=”GBK”编码格式

parse=true是否作为ftl语法解析,默认是true,false就是以文本方式引入.注意在ftl文件里布尔值都是直接赋值的如parse=true,而不是parse=”true”

用例

/common/copyright.ftl包含内容

Copyright2001-2002${me}

Allrightsreserved. 

模板文件

<#assignme="JuilaSmith">

Sometest

Yeah.


<#include"/common/copyright.ftl"encoding=”GBK”> 

输出结果

Sometest

Yeah.


Copyright2001-2002JuilaSmith

Allrightsreserved. 

Import

语法

<#importpathashash>

类似于java里的import,它导入文件,然后就可以在当前文件里使用被导入文件里的宏组件

用例

假设mylib.ftl里定义了宏copyright那么我们在其他模板页面里可以这样使用

<#import"/libs/mylib.ftl"asmy>

<@my.copyrightdate="1999-2002"/>

"my"在freemarker里被称作namespace

compress

语法

<#compress>

...

用来压缩空白空间和空白的行

用例

<#assignx="moo\n\n">

(<#compress>

12345

${moo}

testonly

Isaid,testonly

) 

输出

(12345

moo

testonly

Isaid,testonly) 

escape,noescape

语法

<#escapeidentifierasexpression>

...

<#noescape>...

...

用例

主要使用在相似的字符串变量输出,比如某一个模块的所有字符串输出都必须是html安全的,这个时候就可以使用该表达式

<#escapexasx?

html>

Firstname:

${firstName}

<#noescape>Lastname:

${lastName}

Maidenname:

${maidenName}

相同表达式 

Firstname:

${firstName?

html}

Lastname:

${lastName}

Maidenname:

${maidenName?

html}

assign

语法

<#assignname=value>

or

<#assignname1=value1name2=value2...nameN=valueN>

or

<#assignsameasabove...innamespacehash>

or

<#assignname>

capturethis

or

<#assignnameinnamespacehash>

capturethis

用例

生成变量,并且给变量赋值

给seasons赋予序列值

<#assignseasons=["winter","spring","summer","autumn"]>

给变量test加1

<#assigntest=test+1>

给mynamespage赋予一个变量bgColor,下面可以通过my.bgColor来访问这个变量

<#import"/mylib.ftl"asmy>

<#assignbgColor="red"inmy>

将一段输出的文本作为变量保存在x里

下面的阴影部分输出的文本将被赋值给x

<#assignx>

<#list1..3asn>

${n}<@myMacro/>

Numberofwords:

${x?

word_list?

size}

${x}

<#assignx>Hello${user}!

error

<#assignx=”Hello${user}!

”>true

同时也支持中文赋值,如:

<#assign语法>

java

${语法}

打印输出:

java

global

语法

<#globalname=value>

or

<#globalname1=value1name2=value2...nameN=valueN>

or

<#globalname>

capturethis

全局赋值语法,利用这个语法给变量赋值,那么这个变量在所有的namespace中是可见的,如果这个变量被当前的assign语法覆盖如<#globalx=2><#assignx=1>在当前页面里x=2将被隐藏,或者通过${.global.x}来访问

setting

语法

<#settingname=value>

用来设置整个系统的一个环境

locale

number_format

boolean_format

date_format,time_format,datetime_format

time_zone

classic_compatible

用例

假如当前是匈牙利的设置,然后修改成美国

${1.2}

<#settinglocale="en_US">

${1.2} 

输出

1,2

1.2

因为匈牙利是采用“,”作为十进制的分隔符,美国是用“.”

 

macro,nested,return

语法

<#macronameparam1param2...paramN>

...

<#nestedloopvar1,loopvar2,...,loopvarN>

...

<#return>

...

用例

<#macrotestfoobar="Bar"baaz=-1>

Testtext,andtheparams:

${foo},${bar},${baaz}

<@testfoo="a"bar="b"baaz=5*5-2/>

<@testfoo="a"bar="b"/>

<@testfoo="a"baaz=5*5-2/>

<@testfoo="a"/> 

输出

Testtext,andtheparams:

a,b,23

Testtext,andtheparams:

a,b,-1

Testtext,andtheparams:

a,Bar,23

Testtext,andtheparams:

a,Bar,-1

定义循环输出的宏

<#macrolisttitleitems>

${title?

cap_first}:

    <#listitemsasx>

  • ${x?

    cap_first}

<@listitems=["mouse","elephant","python"]title="Animals"/>

输出结果

Animals:

  • Mouse

  • Elephant

  • Python

包含body的宏

<#macrorepeatcount>

<#list1..countasx>

<#nestedx,x/2,x==count>

<@repeatcount=4;chalfclast>

${c}.${halfc}<#iflast>Last!

 

输出

1.0.5

2.1

3.1.5

4.2Last!

 

t,lt,rt

语法

<#t>去掉左右空白和回车换行

<#lt>去掉左边空白和回车换行

<#rt>去掉右边空白和回车换行

<#nt>取消上面的效果

 

C一些常用方法或注意事项

 

表达式转换类

${expression}计算expression并输出

#{expression}数字计算#{expression;format}安格式输出数字format为M和m

M表示小数点后最多的位数,m表示小数点后最少的位数如#{121.2322;m2M2}输出121.23

 

数字循环

1..5表示从1到5,原型number..number

对浮点取整数

${123.23?

int}输出123

给变量默认值

${var?

default(“helloworld
”)?

html}如果varisnull那么将会被helloworld
替代

判断对象是不是null

<#ifmouse?

exists>

Mousefound

<#else>

也可以直接${mouse?

if_exists})输出布尔形

常用格式化日期

openingTime必须是Date型,详细查看freemarker文档Reference->build-inreferece->build-infordate

${openingTime?

date}

${openingTime?

date_time}

${openingTime?

time}

添加全局共享变量数据模型

在代码里的实现

cfg=Configuration.getDefaultConfiguration();

cfg.setSharedVariable("global","yougood");

页面实现可以通过global指令,具体查看指令里的global部分

直接调用java对象的方法

${object.methed(args)}

字符串处理(内置方法)

html安全输出

“abc

sdfsf”?

html

返回安全的html输出,替换掉html代码

xml安全输出

var?

xml

substring的用法

<#assignuser=”hellojeen”>

${user[0]}${user[4]}

${user[1..4]}

输出:

ho

ello 

类似String.split的用法

“abc;def;ghi”?

split(“;”)返回sequence

将字符串按空格转化成sequence,然后取sequence的长度

var?

word_list效果同var?

split(“”)

var?

word_list?

size

取得字符串长度

var?

length

大写输出字符

var?

upper_case

小写输出字符

var?

lower_case

首字符大写

var?

cap_first

首字符小写

var?

uncap_first

去掉字符串前后空格

var?

trim

每个单词的首字符大写

var?

capitalize

类似String.indexof:

“babcdabcd”?

index_of(“abc”)返回1

“babcdabcd”?

index_of(“abc”,2)返回5

类似String.lastIndexOf

last_index_of和String.lastIndexOf类似,同上

下面两个可能在代码生成的时候使用(在引号前加”\”)

j_string:

在字符串引号前加”\”

<#assignbeanName='The"foo"bean.'>

StringBEAN_NAME="${beanName?

j_string}";

打印输出:

StringBEAN_NAME="The\"foo\"bean.";

js_string:

<#assignuser="BigJoe's\"righthand\".">

 

打印输出

alert("WelcomeBigJoe\'s\"righthand\"!

");

替换字符串replace

${s?

replace(‘ba’,‘XY’)}

${s?

replace(‘ba’,‘XY’,‘规则参数’)}将s里的所有的ba替换成xy规则参数包含:

irmscf具体含义如下:

∙i:

大小写不区分.

∙f:

只替换第一个出现被替换字符串的字符串

∙r:

XY是正则表达式

∙m:

Multi-linemodeforregularexpressions.Inmulti-linemodetheexpressions^and$matchjustafterorjustbefore,respectively,alineterminatorortheendofthestring.Bydefaulttheseexpressionsonlymatchatthebeginningandtheendoftheentirestring.

∙s:

Enablesdotallmodeforregularexpressions(sameasPerlsinge-linemode).Indotallmode,theexpression.matchesanycharacter,includingalineterminator.Bydefaultthisexpressiondoesnotmatchlineterminators.

∙c:

Permitswhitespaceandcommentsinregularexpressions.

 

在模板里对sequences和hashes初始化

sequences

1.[“you”,”me”,”he”]

2.1..100

3.[{“Akey”:

”Avalue”},{“Akey1”:

”Avalue1”},

{“Bkey”:

”Bvalue”},{“Bkey1”:

”Bvalue1”},

]

hashes{“you”:

”a”,”me”:

”b”,”he”:

”c”}

 

注释标志

<#--

这里是注释

-->

旧版本的freemarker采用的是<#comment>注释方法

sequences内置方法

sequence?

first

返回sequence的第一个值;前提条件sequence不能是null

sequence?

last

返回sequence最后一个值

sequence?

reverse

反转sequence的值

sequence?

size

返回sequence的大小

sequence?

sort

对sequence按里面的对象toString()的结果进行排序

sequence?

sort_by(value)

对sequence按里面的对象的属性value进行排序

如:

sequence里面放入的是10个user对象,user对象里面包含name,age等属性

sequence?

sort_by(name)表示所有的user按user.name进行排序

hashes内置方法

hash?

keys

返回hash里的所有keys,返回结果类型sequence

hash?

values

返回hash里的所有value,返回结果类型sequence

Dfreemarker在web开发中注意事项

freemarker与webwork整合

web中常用的几个对象

与webwork整合之后通过配置的servlet已经把request,session等对象置入了数据模型中

在view中存在下面的对象

我们可以在ftl中${req}来打印req对象

∙req-thecurrentHttpServletRequest

∙res-thecurrentHttpServletResponse

∙stack-thecurrentOgnlValueStack

∙ognl-theOgnlToolinstance

∙webwork-aninstanceofFreemarkerWebWorkUtil

∙action-thecurrentWebWorkaction

∙exception-optionaltheExceptioninstance,iftheviewisaJSPexceptionorServletexceptionview

view中值的搜索顺序

${name}将会以下面的顺序查找name值

∙freemarkervariables

∙valuestack

∙requestattributes

∙sessionattributes

∙servletcontextattributes

在模板里ftl里使用标签

注意,如果标签的属性值是数字,那么必须采用nubmer=123方式给属性赋值

JSP页面

<%@pagecontentType="text/html;charset=ISO-8859-2"language="java"%>

<%@tagliburi="/WEB-INF/struts-html.tld"prefix="html"%>

<%@tagliburi="/WEB-INF/struts-bean.tld"prefix="bean"%>

messagekey="welcome.title"/>

errors/>

formaction="/query">

Keyword:

textproperty="keyword"/>

Exclude:

textproperty="exclude"/>

submitvalue="Send"/>

form>

 

模板ftl页面

<#assignhtml=JspTaglibs["/WEB-INF/struts-html.tld"]>

<#assignbean=JspTaglibs["/WEB-INF/struts-bean.tld"]>

<@bean.messagekey="welcome.title"/>

<@html.errors/>

<@html.formaction="/query">

Keyword:

<@html.textproperty="keyword"/>

Exclude:

<@html.textproperty="exclude"/>

<@html.submitvalue="S

展开阅读全文
相关搜索
资源标签

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1