一、准备工作
1.1 下载文件
可以从htt p://freema rker.source forge/站点下载最新的
(最新版本是0.9.14)。free marke r.jar包(目前最新版本是2.3.18)与eclip se插件
1.2 安装ecli pse插件
将下载来的e clips e插件解压缩到本地磁盘,更改huds on.freema rker_ide_0.9.14文件夹中的free marke r-2.3.6.jar文件更改成最新版本的fre emark er-2.3.18.jar,并且将MET A-INF/MANIFE ST.MF文件中的Bundl e-ClassP ath属性值修改为f reema rker-2.3.18.jar。最后将hud son.freema rker_ide_0.9.14放到ec lipse的plug ins目录中,完成ecli pse 插件的安装。
1.3 freema rker文档下载
从http://freema rker.source forge/中下载帮助文档(也有中文的手册)
二、freema rker的使用
2.1 简介
2.1.1 FTL tag标签
由于free marke r tag标签是属于fre emark er的指令,它们仅仅是f reema rker处理过程中的信息,而不会输出到页面上,所以它们与h tml标签有一些区别。这些标签都是以#号开头,如<#import"/public/work_p ublic.ftl" as public>。但用户自定义的标签是以@符号开头,如在free marke r中使用s truts标签:<@s.if test="result s!=null&&result s.size()!=0">
注意FTL标签不可以在其他FTL标签和插值中使用(注释可以在F TL标签和插值中使用,因为它在解析时,整个注释都将抛弃,不会影响具体代码),如下面这样就是一个错误的写法:
<#if <#includ e 'foo'>='bar'>...</#if>
2.1.2 注释
freema rker的文档注释与html相似,但它是以<#--和-->来分割的。任何介于这两个分隔符(包含分隔符本身)之间内容会被f reem arker忽略,就不会输出出来了。其他任何不是F TL 标签,插值或注释的内容将被视为静态文本,这些东西就不会被fre emark er所解析,会被按照原样输出出来。
2.1.3 引入外部文件
如果模板文件使用了struts2标签,则可以这样调用:
<@s.includ e value="/public/publis.jsp" />
在freemarker版本2.3.15及其以后都可以使用如下方式引入外部文件:
<@includ e_pag e path="/public/publis.jsp" />或者使用:<#includ e "/copyri ght_f ooter.html">的方式引入外部文件。
注意:<#includ e "/copyri ght_f ooter.html">是为了包含f reemarker模板而不会牵涉到servlet容器,使用<#includ e..>包含的模板和包含它的模板共享模板处理状态,比如数据模型和模板语言变量,而<@includ e_pag e..>开始一个独立的HTTP请求处理。
对于js、css等其他外部资源的引入方式不变,依旧是类似:
<script type="text/javasc ript" src="./public/work_p ublic.js"> </script>注意该路径与f tl文件路径地址无关,而是真正的访问路径。
2.2 freema rker与sprin g的集成
将freem arker.jar包放到web工程的lib目录中,并在web.xml文件中加入如下的代码:
<servle t>
<servle t-name>freemarker</servle t-name>
<servle t-class>
freema rker.ext.servle t.Freema rkerS ervle t
</servle t-class>
<init-param>
<param-name>Templa tePat h</param-name>
<param-value>/</param-value>
</init-param>
<init-param>
<param-name>NoCach e</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>Conten tType</param-name>
<param-value>text/html</param-value>
</init-param>
<init-param>
<param-name>templa te_up date_delay</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startu p>1</load-on-startu p>
</servle t>
<servle t-mappin g>
<servle t-name>freema rker</servle t-name>
<url-patter n>*.ftl</url-patter n>
</servle t-mappin g>
2.3 freema rker中使用str uts标签
由于free marke r本身的标签在变量名不存在或变量为nul l的情况下处理比较复杂(它不允许出现这两种情况的变量,在使用可能出现变量名不存在或nu ll值的变量时,首先需要判断该变量是否存在,否则当出现这两种情况时,freema rker会报解析错误,这将直接在最终生成的h tml页面中显示出来),所以当不能确定该值是否存在时,可以在fre emark er中使用strut s标签,它没有这类的问题(freema rker也提供了判断一个值是否为空的情况,如${list!}或者使用<#if指令来判断指定的变量是否存在:<#if list?exists && list!=null></#if>或<#if list!=null></#if>)。
首先将str uts2-core.jar包中的strut s-tags.tld文件加入到WEB-INF/tags 文件夹中
然后在需要加入stru ts2标签的free marke r的ftl文件头部加入如下语句:
<#assign s=JspTag libs["/WEB-INF/tags/struts-tags.tld"]>
注意:与在jsp中使用标签类似,每个使用ft l文件的头部都需要加上上述#assign 标签,在公共文件中加入上述#assign后,其他引用该公共文件的f tl文件中若想使用struts标签的话,也是需要再次加入的。
例如:strtus2的判断语句在fre emark er文件中的使用方式如下:
<@s.if test="result s!=null&&result s.size()!=0">
${public_coun t_dat a}<@s.proper ty value="result s.size()"/> </@s.if>
<@s.else>
${public_none_data}
</@s.else>
2.4 变量
在freem arker中变量是区分大小写的,如list就不能写成L ist。定义变量使用assign标签,具体使用如:<#assign test_s tring="字符串">,也可以使用如<#assign test_string_array=["字符串1","字符串2","字符串3"]>的方式来定义数组(或列表)
可以使用如下两种方式在页面上显示一个变量:
editor版本struts2的property标签
<@s.proper ty value="#user.user_n ame"/>
freemarker的${}标签
${myobj}myobj可以是后台传递的变量,也可以是在模板文件中定义的变量
处理不存在的变量
由于直接使用freemarker标签会经常碰到不存在的变量或变量值为null的情况,而freemarker则不支持使用这样的变量,因此在可能出现不存在的变量或变量值为null时,首先需要判断该变量是否存在(是否不为nu ll)。
如:${Reques tPara meter s['locale']!'zh_CN',这时,如果URL参数中的locale属性不存在,则返回'zh_CN'这段字符串,如果存在,则'zh_CN'将不起任何作用。
或者使用<#if user??><h1>Welcom e ${user}!</h1></#if>判断指定的变量user是否存在(??需要结合if使用)。
2.5 列表
一般界面上可以使用两种形式来循环列表,一种是使用s truts2中的it erato r标签,另一种是使用freem arker的list标签。下面就这两种标签做一些描述:
struts2的ite rator标签
<@s.iterat or id="user" value="result s" status="index"> <@s.proper ty value="#user.user_n ame"/>
</@s.iterat or>
说明:
value="result s"指的是从后台action中传递过来的列表r esults,即在action 中定义一个results的变量,
然后定义一个get方法即可在前台页面中使用。如果results值不是从后台获取的,那么可以使用value="{'a','b','c'}"这种方式。
id="user"指的是results列表中的每一个对象,如在循环中的:<@s.proper ty value="#user.user_n ame"/>可以循环的显示出results中每一个对象的user_name属性。
status="index"这是一个标识行数的属性,如<@s.proper ty value="#index.index"/>它表示当前项在循环中的步进索引的数值,该值从0开始。也可以使用#index.odd这个属性来判断当前项在循环中步进索引的数值是偶数还是奇数,当#index.odd为tr ue时,表示为偶数,为false时,表示为奇数。
freema rker的list标签
<#assign mylist=['a', 'b', 'c']>
<#list mylist as myobj>
${myobj_index}: ${myobj}
<#if myobj_has_n ext>,</#if></#list>
说明:
<#assign mylist=['a', 'b', 'c']>定义一个定长数组,数组中包含3个元素。
<#list mylist as myobj>循环mylist数组,每个数组变量在循环时取一个别名:myobj,类似Java中的for(String myobj: mylist){}。mylist也可以更换成后台Java代码中的对象,如results:<#list result s as user>
${myobj_index}这是一个包含当前项在循环中的步进索引的数值。
<#if myobj_has_n ext>,</#if>来辨别当前项是否是序列的最后一项的布尔值。
${myobj}在页面上显示myobj数据。
如果需要跳出list循环的话,可以使用<#break>来退出当前循环
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论