<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 0,  comments - 17,  trackbacks - 0
    來源:http://www.tkk7.com/pepsixp/archive/2005/03/11/1685.html
    FreeMarker是一個用Java編寫的模板引擎,主要用來生成HTML Web頁面,特別是基于MVC模式的應用程序。雖然FreeMarker具有一些編程的能力,但不像PHP,通常由Java程序準備要顯示的數(shù)據(jù),由FreeMarker模板生成頁面。  FreeMarker可以作為Web應用框架一個組件,但它與容器無關,在非Web應用程序環(huán)境也能工作的很好。 FreeMarker適合作為MVC的視圖組件,還能在模板中使用JSP標記庫。
    <html>
    <head>
      
    <title>Welcome!</title>
    </head>
    <body>
      
    <h1>Welcome ${user}!</h1>
      
    <p>Our latest product:
      
    <href="${latestProduct.url}">${latestProduct.name}</a>!
    </body>
    </html>  

    上面的例子中,在簡單的HTML中加入了一些由${…}包圍的特定FreeMarker的指令,這個文件就稱為模板了。而user、latestProduct.url和latestProduct.name來自于數(shù)據(jù)模型,由Java程序提供,模板設計者就不用關心數(shù)據(jù)從哪來的。

    FreeMarker模板中可以包括下面四種特定部分:
    一.) 文本:直接輸出
    二.) FTL標記(FreeMarker模板語言標記):類似于HTML標記,名字前加#(有些以@開始,用戶自定義標記)予以區(qū)分,不會輸出。
    字符串- 使用單引號或雙引號限定;如果包含特殊字符需要轉(zhuǎn)義符:${"It's \"quoted\" andthis is a backslash: \\"}
    有一類特殊的字符串:${r"C:\foo\bar"},輸出結(jié)構為:C:\foo\bar,在引號前面加r被認為是純文本。
    數(shù)字-直接輸入,不需要引號。${08}, ${+8}, ${8.00} and ${8} 都是相同的
    布爾值-true和false,不使用引號
    Sequences(序列)-由逗號分隔的變量列表,由方括號限定,類似java中的一維數(shù)組:

    <#list ["winter", "spring", "summer", "autumn"] as x>
    ${x}
    </#list>

    輸出結(jié)果:
    winter
    spring
    summer
    autumn

    例二:[2 + 2, [1, 2, 3, 4], "whatnot"]
    例三:2..5,等同于[2, 3, 4, 5];5..2,等同于[5,4,3,2]。注意方括號是不需要的。

    Hashes(散列)-由逗號分隔的鍵-值列表,由大括號限定,鍵和值之間用冒號分隔:{"name":"green mouse", "price":150},鍵和值都是表達式,但是鍵必須是字符串。

    獲取變量-${variable},變量名只能是字母、數(shù)字、下劃線、$、@和#的組合,且不能以數(shù)字開頭。下列表達式是等價的:
    book.author.name
    book["author"].name
    book.author.["name"]
    book["author"]["name"]

    獲取Sequence(序列)片斷-使用[startindex..endindex],例如:seq中存儲了"a", "b", "c", "d","e",那么seq[1..2]包含了b和c兩個值。

    可以使用.variablename語法訪問FreeMarker內(nèi)置變量。

    字符串操作
    {"Hello ${user}!"} <==> ${"Hello " + user + "!"}
    ${"${user}${user}${user}${user}"} <==> ${user + user + user + user}

    ${…}只能在文本中使用,下面是錯誤的代碼:
    <#if ${isBig}>Wow!</#if>
    <#if "${isBig}">Wow!</#if>  //此處的代碼也是錯誤的,因為if指令需要的是boolean,實際的卻是個字符串

    子字符串的操作,假設user的值為"Big Joe":
    ${user[0]}${user[4]}  <==>  BJ
    ${user[1..4]}  <==> ig J

    Sequences(序列)操作

    <#list ["Joe", "Fred"] + ["Julia", "Kate"] as user>
    - ${user}
    </#list>

    結(jié)果:
    - Joe
    - Fred
    - Julia
    - Kate

    Hashes(散列)操作

    <#assign ages {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}>
    - Joe is ${ages.Joe}
    - Fred is ${ages.Fred}
    - Julia is ${ages.Julia}  

    結(jié)果:
    - Joe is 30
    - Fred is 25
    - Julia is 18 

    算術運算

    <#-- x的值設定為5 -->
    ${x * x - 100}
    ${x / 2}
    ${12 % 10}

    結(jié)果:
    -75
    2.5
    2

    注意: 操作符兩邊必須是數(shù)字;使用"+"時,如果一邊是數(shù)字,一邊是字符串,就會自動將數(shù)字轉(zhuǎn)換為字符串。

    使用內(nèi)建的指令int獲得整數(shù)部分

    ${(x/2)?int}
    ${1.1?int}
    ${1.999?int}
    ${-1.1?int}
    ${-1.999?int}

    結(jié)果:
    2
    1
    1
    -1
    -1

    比較操作符-<#if expression>...</#if>
    1.)使用=(或==,完全相等)測試兩個值是否相等,使用!= 測試兩個值是否不相等
    2.)=和!=兩邊必須是相同類型的值,否則會產(chǎn)生錯誤,例如<#if 1 = "1">會引起錯誤
    3.)Freemarker是精確比較,所以"x"、"x  "和"X"是不相等的
    4.)對數(shù)字和日期可以使用<、<=、>和>=,但不能用于字符串
    5.)由于Freemarker會將>解釋成FTL標記的結(jié)束字符,所以對于>和>=可以使用括號來避免這種情況,例如<#if (x > y)>,另一種替代的方法是,使用lt、lte、gt和gte來替代<、<=、>和>=

    邏輯操作符-&&(and)、||(or)、!(not),只能用于布爾值,否則會產(chǎn)生錯誤
    <#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> 

    內(nèi)置函數(shù)-用法類似訪問hash(散列)的子變量,只是使用"?"替代".",例如:user?upper_case
    下面列出常用的一些函數(shù):
    對于字符串
    html-對字符串進行HTML編碼
    cap_first-使字符串第一個字母大寫
    lower_case-將字符串轉(zhuǎn)換成小寫
    trim-去掉字符串前后的空白字符
    對于Sequences(序列)
    size-獲得序列中元素的數(shù)目
    對于數(shù)字
    int-取得數(shù)字的整數(shù)部分(如-1.9?int的結(jié)果是-1)

    例一:

    <#-- test的值為Tom & Jerry -->
    ${test?html}
    ${test?upper_case?html}

    結(jié)果:
    Tom &amp; Jerry
    TOM &amp; JERRY

    例二:

    <#-- seasons的值為"winter", "spring", "summer", "autumn" --> 
    ${seasons?size}
    ${seasons[1]?cap_first} 
    <#-- left side can by any expression -->
    ${"horse"?cap_first}  

    結(jié)果:
    4
    Spring
    Horse 

    方法的調(diào)用
    ${repeat("What", 3)}
    ${repeat(repeat("x", 2), 3) + repeat("What", 4)?upper_case}
    結(jié)果:
    WhatWhatWhat
    xxxxxxWHATWHATWHATWHAT

    操作符優(yōu)先順序
    后綴            [subvarName] [subStringRange] . (methodParams)
    一元            +expr、-expr、!
    內(nèi)建            ?
    乘法            *、 / 、%
    加法            +、-
    關系            <、>、<=、>=(lt、lte、gt、gte)
    相等            =、!=
    邏輯            &&
    邏輯            ||
    數(shù)字范圍      ..

    三.) Interpolation:由${...}或#{...}兩種類型,輸出計算值,可以定義輸出的格式
    例一:

    <#setting number_format="currency"/>
    <#assign answer=42/>
    ${answer}
    ${answer?string}  <#-- the same as ${answer} --
    >
    ${answer?string.number}
    ${answer?string.currency}
    ${answer?string.percent} 

    結(jié)果:
    $42.00
    $42.00
    42
    $42.00
    4,200%

    例二:

    ${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}
    ${lastUpdated?string("EEE, MMM d, ''yy")}
    ${lastUpdated?string("EEEE, MMMM dd, yyyy, hh:mm:ss a '('zzz')'")}  

    結(jié)果:
    2003-04-08 21:24:44 Pacific Daylight Time
    Tue, Apr 8, '03
    Tuesday, April 08, 2003, 09:24:44 PM (PDT)

    例三:

    <#assign foo=true/>
    ${foo?string("yes", "no")}

    結(jié)果:
    yes

    例四:

    <#-- x is 2.582 and y is 4 -->
    #{x; M2}   
    <#-- 2.58 -->
    #{y; M2}   
    <#--    -->
    #{x; m1}   
    <#-- 2.6 -->
    #{y; m1}   
    <#-- 4.0 -->
    #{x; m1M2} 
    <#-- 2.58 -->
    #{y; m1M2} 
    <#-- 4.0  -->  

    說明:mX-小數(shù)部分最小X位;MX-小數(shù)部分最大X位。

    四.) 注釋:<#--和-->

    下面是一個常用的模板例子:

    <p>We have these animals:
    <table border=1>
      
    <tr><th>Name<th>Price
      
    <#list animals as being>
      
    <tr>
        
    <td>
          
    <#if being.size = "large"><b></#if>
          ${being.name}
          
    <#if being.size="large"></b></#if>
        
    <td>${being.price} Euros
      
    </#list>
     
    </table> 
    <#include "/copyright_footer.html">

    注意點
    1.) FreeMarker是區(qū)分大小寫的;
    2.) FTL標記不能位于另一個FTL標記內(nèi)部,例如:<#if <#include 'foo'>='bar'>...</if>;
    3.) ${…}只能在文本中使用;
    4.) 多余的空白字符會在模板輸出時去除;
    5.) 如果使用的指令不存在,會產(chǎn)生一個錯誤消息。

    posted on 2008-05-12 23:51 xyz 閱讀(323) 評論(0)  編輯  收藏 所屬分類: 網(wǎng)絡文摘

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    留言簿

    隨筆檔案(1)

    文章分類(44)

    文章檔案(46)

    收藏夾(1)

    Adobe

    AOP

    API

    appServer

    BI

    c

    • c-free
    • codeblocks
    • codelite
    • CodeLite IDE 是一個強大的開源,跨平臺的 C/C++整合開發(fā)環(huán)境. 支持包括 Windows、Linux 和 Mac 系統(tǒng)下運行
    • codelite官網(wǎng)
    • dev-c++
    • Dev-C++是一個C&C++開發(fā)工具,它是一款自由軟件,遵守GPL協(xié)議。
    • GCC
    • GCC 原名為 GNU C 語言編譯器(GNU C Compiler),因為它原本只能處理 C語言。GCC 很快地擴展,變得可處理 C++。之后也變得可處理 Fortran、Pascal、Objective-C、Java, 以及 Ada 與其他語言。

    Cache

    CMS

    DB

    eclipse

    FreeMarker

    hibernate

    html5

    ibatis

    java

    jquery

    js

    json

    Linux

    Log

    mail server

    mobile

    mysql

    oauth

    openID

    other

    PHP

    portal

    report

    Scheduler

    schema

    Security

    SOA

    spring

    struts

    UI原型設計

    w3c

    Wap

    webservice

    xml

    供應鏈管理

    博客鏈接

    好網(wǎng)站

    工作流

    開源網(wǎng)

    招聘

    插件下載

    操作系統(tǒng)

    構建可伸縮的系統(tǒng)

    構建工具

    測試

    游戲

    源碼托管

    經(jīng)營

    資源

    金融/財務

    搜索

    •  

    最新評論

    主站蜘蛛池模板: 国产精品无码素人福利免费| 亚洲乱妇老熟女爽到高潮的片 | 中文字幕第一页亚洲| 亚洲高清免费在线观看| 国产无遮挡又黄又爽免费网站| 亚洲熟妇无码av另类vr影视| 亚洲国产精品人久久| 亚洲熟女乱综合一区二区| 嫩草视频在线免费观看| 中文字幕免费在线| 中文字幕无码日韩专区免费| 日韩毛片在线免费观看| 无码亚洲成a人在线观看| 亚洲av极品无码专区在线观看| 亚洲av无码av制服另类专区| a级亚洲片精品久久久久久久| 国产精品免费_区二区三区观看| 无码国产精品一区二区免费式影视| 男人的天堂网免费网站| 国产人成网在线播放VA免费| 美女无遮挡免费视频网站| 亚洲精华国产精华精华液好用| 亚洲H在线播放在线观看H| 亚洲国产精品免费在线观看| 久久亚洲AV成人无码国产| 亚洲国产综合91精品麻豆| 亚洲AV无码一区二区三区系列| 久久精品国产亚洲Aⅴ香蕉| 亚洲国产精品第一区二区三区| 免费国内精品久久久久影院| 在线观看免费亚洲| 国产又黄又爽又猛的免费视频播放 | 91精品免费国产高清在线| 99精品视频在线观看免费播放| 99精品国产成人a∨免费看| 久久久免费精品re6| 国产一区二区三区免费| 精品无码国产污污污免费网站| 亚洲精品免费观看| 色se01短视频永久免费| 91免费资源网站入口|