IT教程 | 加入收藏 | 简体 | 繁体
GUI编程:Java基础StrutsSpringHibernateIbatis框架整合GUI编程Ejb分布式开发
当前位置: 首页 > Java教程 > GUI编程

FreeMarker初级实例教程讲解

2015-03-26来源:[www.121ask.com]热度:0℃ 【字体:

FreeMarker初级实例教程讲解:
初级部分
 
1.       基础知识
       在Web页面(或其它类型的文档)中显示动态数据的时候,你可以在HTML(或其它要输出的文本)中加入一些特定指令,FreeMarker会在输出页面给最终用户时,用适当的数据替代这些特定指令。数据由程序员编程来创建,向模板提供变化的信息,这些信息来自于数据库、文件,甚至于在程序中直接生成,模板设计者不关心数据从那儿来,只使用已经建立的数据。
 
FreeMarker语法主要分为三种:
1):输出语法
Freemarker使用在HTML中加入了一些由${…}包围的特定代码来输出已经建立的数据。
比如我们在程序中已经建立了
user=”Big Joe”, latestProduct.url=”product.html”,lastestProduct.name=”产品”这三个数据。
<html>
<head>
  <title>Welcome!</title>
</head>
<body>
  <h1>Welcome ${user}!</h1>
  <p>Our latest product:
  <a href="${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html> 
其中红色部分就是你使用Freemarker在html中加入的特定代码.
显示为
<html>
<head>
  <title>Welcome!</title>
</head>
<body>
  <h1>Welcome Big Joe!</h1>
  <p>Our latest product:
  <a href=" product.html ">产品</a>!
</body>
</html>
其中红色部分就是上面对应红色代码输出的已经建立的数据。
Freemarker输出数据的语法格式为${…},其中为你要输出数据的名称.
 
2): FTL标记
       FTL标记(FreeMarker模板语言标记)类似于HTML标记,为了与HTML标记区分,用#开始。
       FTL标记不用做输出,一般与输出语法${…}结合起来使用,输出显示用户想要显示的数据。
       FTL语法以<#标记 … >开始,</#标记>结束,其中标记是你需要使用的具体标记。
注意<,#,标记三个之间不能有空格,</#标记>也不能有空格。
 
       我们最长使用的FTL主要有两种
 
if指令(判断指令)
1 .   <#if (条件)>
        </#if>
       其中条件为你的具体判断条件,条件为真就会执行命令内的内容,如果为假则不执行。
       比如(条件为真)
        <#if (1<2)>
              1小于2
        </#if>
       就会显示:1小于2.
       如果(条件为假)
       <#if (1>2)>
              1小于2
        </#if>
       则不会显示1小于2
 
       一般我们会使用已经建立好的数据来进行判断。
       如我们已经建立好了一个数据name=”joe”
       <#if (name==’joe’)>
              我是joe
        </#if>
       其中name就是我们已经建立的数据的名称。因为我们建立的数据值就是joe所以我们name==”joe”这个条件为真。这条命令就会输出:
我是joe
注意:<#if ${name}==’joe’>
              我是joe
        </#if>
这样是错误的,在FTL标签<>之内是不需要使用其他标签的,直接使用名称就可以了。
 
 
2.   <#if (条件)>
<#else>
        </#if>
       和上面的语法一致,只是多了<#else>命令
       如上面的例子
      
<#if  (name==’joe’)>
              我是joe
       <#else>
              我不是joe
        </#if>
       如果是joe就会显示:我是joe.  如果不是joe就会显示:我不是joe。
 
       注意:所有的<#else>必须写在<#if></#if>之间, FTL标记不能位于另一个FTL标记内部,FTL标记不能够交叉,而应该正确的嵌套.
 
3.    <#if (条件1)>
<#elseif  (条件2)>
<#elseif  (条件3)>
….
        </#if>
       多次判断,在条件1判断完之后筛选出剩余的数据再进行条件2的判断筛选….
      
list指令(循环指令)
 
  语法:<#list datas as data>
              </#list>
    datas表示你已经建立好的多条数据集合,data表示循环出得到的每一条数据,红色部分(list,as)是FTL标记的命令不能改变,绿色部分(datas,data)根据实际情况自己定义。
 
  例子:
       <#list ["winter", "spring", "summer", "autumn"] as x>
              ${x},
       </#list>
  显示:
       Winter,sprong ,summer,autumn,
 
["winter", "spring", "summer", "autumn"]就是需要循环的数据集合,x代表循环的每条数据,在循环中使用${x}就把x代表的每条数据也就是数据集合的每条数据逐个输出显示。
 
<#list>一般都要和${…}指令联合起来使用,<#list>循环拿出每条数据,使用${…}指令来进行输出显示。复杂的你也可以在<#list>指令中加入<#if>指令来对数据进行判断输出,甚至你可能需要对数据进行多次循环。
注意联合使用的时候, FTL标记不能位于另一个FTL标记内部,FTL标记不能够交叉,而应该正确的嵌套,如:
<#list datas as data>
<#if 条件>
</#list>
</#if>
这样的嵌套是错误的
<#list datas as data>
<#if 条件>
</#if>
</#list>
这样才是正确的。
 
一般我们的数据集合应该是后台已经建立好的数据集,如:
<#list list_news as news>
       ${news. showTitle}<br>
</#list>
显示:
       标题
       标题
       标题
       ……
 
list_news就是我们模板中需要显示的新闻数据集合名称,这个数据在到页面之前是已经建立好的,网页设计人员不用关心这个数据是怎么生成的,只需要拿着他的名字使用即可。
 
news 代表我们每次循环出来的一条新闻数据。
${news. showTitle}显示每条新闻的标题。
 
 
If指令和list指令一起使用的例子
<#list [1,2,3,4,5,6,7] as x>
       <#if (x<3)>
              Num is ${x}<3
       <#elseif (x<5)>
              Num is ${x}<5
       <#else>
              Num is ${x}>=5
       <#if>
</#list>
显示结果
       Num is 1<3
       Num is 2<3
       Num is 3<5
       Num is 4<5
       Num is 5>=5
       Num is 6>=5
       Num is 7>=5
 
 
3).注释
 
注释:包含在<#--和-->之间不会输出
注释可以位于FTL标记内部
<#if <#-- some comment... --> 条件>
</#if>
 
2.FreeMarker表达式
  字符串
1.使用单引号或双引号限定。
2.如果包含特殊字符需要转义。
下面是支持的转义序列
转义序列 含义
\" 双引号(u0022)
\' 单引号(u0027)
\\ 反斜杠(u005C)
\n 换行(u000A)
\r Return (u000D)
\t Tab (u0009)
\b Backspace (u0008)
\f Form feed (u000C)
\l
\g
\a &
\{ {
\xCode 4位16进制Unicode代码
 
       如下面的例子:
       ${"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: \
       红色部分为转义后的字符
 
3.有一类特殊的字符串称为raw字符串,被认为是纯文本,其中的\和{等不具有特殊含义,该类字符串在引号前面加r。
       ${r"${foo}"}
${r"C:\foo\bar"}
显示为:
${foo}
C:\foo\bar
数字
    1.直接输入,不需要引号
       2.精度数字使用“.”分隔,不能使用分组符号
       3.目前版本不支持科学计数法,所以“1E3”是错误的
       4.不能省略小数点前面的0,所以“.5”是错误的
       5.数字8、+8、08和8.00都是相同的
布尔值
    true和false,不使用引号
 
3.字符串操作
 
       1.可以使用${..}(或#{..})在文本部分插入表达式的值,例如:user=”joe”
 
       ${"Hello ${user}!"}
       ${"${user}${user}${user}${user}"} 
 
       2.可以使用+操作符获得同样的结果
       ${"Hello " + user + "!"}
       ${user + user + user + user}
 
       显示:
              Hello joe
              joejoejoejoe
 
       3.${..}只能用于文本部分,下面的代码是错误的:
       <#if ${isBig}>Wow!</#if>
       <#if "${isBig}">Wow!</#if>
       应该写成:
       <#if isBig>Wow!</#if>
 
4.算术运算
       1. +、-、×、/、%,下面是一个例子:
       ${x * x - 100}
       ${x / 2}
       ${12 % 10}
       输出结果是(假设x为5):
       -75
       2.5
       2
 
       2.操作符两边必须是数字,因此下面的代码是错误的:
       ${3 * "5"} <#-- WRONG! --> 
 
       3.使用+操作符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串,例如:
       ${3 + "5"} 
       输出结果是:
       35
 
5.比较操作符
       1.使用=(或==,完全相等)测试两个值是否相等,使用!= 测试两个值是否不相等
       2.=和!=两边必须是相同类型的值,否则会产生错误,例如<#if 1 = "1">会引起错误
       3.Freemarker是精确比较,所以对"x"、"x  "和"X"是不相等的
       4.对数字和日期可以使用<、<=、>和>=,但不能用于字符串
       5.由于Freemarker会将>解释成FTL标记的结束字符,所以对于>和>=可以使用括号来  避免这种情况,例如<#if (x > y)>
       6.另一种替代的方法是,使用lt、lte、gt和gte来替代<、<=、>和>=
 
6.逻辑操作符
       &&(and)、||(or)、!(not),只能用于布尔值,否则会产生错误
       例子:
       <#if x < 12 && color = "green">
            We have less than 12 things, and they are green.
       </#if>
       <#if !hot> <#-- here hot must be a boolean -->
            It's not hot.
       </#if>

以上IT文章《FreeMarker初级实例教程讲解》由名客技术网[www.121ask.com]提供阅读!
推荐软件
    名客技术网是一个免费为广大IT技术人员提供IT教程,绿色软件,asp/php/jsp/java/net等实例视频教程,CMS教程,破解软件下载以及学习相关源码、知识的IT网站。
    名客技术网如果无意之中侵犯了您的版权,请来电告知,本站将在3个工作日内删除 QQ:175352796
    Copyright 2011-2017 Powered by 121ASK.COM, All Rights Reserved.
    备案号:鄂ICP备11013833号-3