日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FreeMarker中文API手册(完整)

發布時間:2025/3/13 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FreeMarker中文API手册(完整) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自http://blog.csdn.net/junjun16818/article/details/6990068

FreeMarker概述
?

???????? FreeMarker是一個模板引擎,一個基于模板生成文本輸出的通用工具,使用純Java編寫

???????? FreeMarker被設計用來生成HTML Web頁面,特別是基于MVC模式的應用程序

???????? 雖然FreeMarker具有一些編程的能力,但通常由Java程序準備要顯示的數據,由FreeMarker生成頁面,通過模板顯示準備的數據(如下圖)

???????? FreeMarker不是一個Web應用框架,而適合作為Web應用框架一個組件

???????? FreeMarker與容器無關,因為它并不知道HTTP或Servlet;FreeMarker同樣可以應用于非Web應用程序環境

???????? FreeMarker更適合作為Model2框架(如Struts)的視圖組件,你也可以在模板中使用JSP標記庫

???????? FreeMarker是免費的

?

?

1、通用目標

???????? 能夠生成各種文本:HTML、XML、RTF、Java源代碼等等

???????? 易于嵌入到你的產品中:輕量級;不需要Servlet環境

???????? 插件式模板載入器:可以從任何源載入模板,如本地文件、數據庫等等

???????? 你可以按你所需生成文本:保存到本地文件;作為Email發送;從Web應用程序發送它返回給Web瀏覽器

?

2、強大的模板語言

???????? 所有常用的指令:include、if/elseif/else、循環結構

???????? 在模板中創建和改變變量

???????? 幾乎在任何地方都可以使用復雜表達式來指定值

???????? 命名的宏,可以具有位置參數和嵌套內容

???????? 名字空間有助于建立和維護可重用的宏庫,或者將一個大工程分成模塊,而不必擔心名字沖突

???????? 輸出轉換塊:在嵌套模板片段生成輸出時,轉換HTML轉義、壓縮、語法高亮等等;你可以定義自己的轉換

?

3、通用數據模型

???????? FreeMarker不是直接反射到Java對象,Java對象通過插件式對象封裝,以變量方式在模板中顯示

???????? 你可以使用抽象(接口)方式表示對象(JavaBean、XML文檔、SQL查詢結果集等等),告訴模板開發者使用方法,使其不受技術細節的打擾

?

4、為Web準備

???????? 在模板語言中內建處理典型Web相關任務(如HTML轉義)的結構

???????? 能夠集成到Model2 Web應用框架中作為JSP的替代

???????? 支持JSP標記庫

???????? 為MVC模式設計:分離可視化設計和應用程序邏輯;分離頁面設計員和程序員

?

5、智能的國際化和本地化

???????? 字符集智能化(內部使用UNICODE)

???????? 數字格式本地化敏感

???????? 日期和時間格式本地化敏感

???????? 非US字符集可以用作標識(如變量名)

???????? 多種不同語言的相同模板

?

6、強大的XML處理能力

???????? <#recurse> 和<#visit>指令(2.3版本)用于遞歸遍歷XML樹

???????? 在模板中清楚和直覺的訪問XML對象模型

??
?


??
FreeMarker設計指南(1)

?
1、快速入門

(1)模板 + 數據模型 = 輸出

???????? FreeMarker基于設計者和程序員是具有不同專業技能的不同個體的觀念

???????? 他們是分工勞動的:設計者專注于表示——創建HTML文件、圖片、Web頁面的其它可視化方面;程序員創建系統,生成設計頁面要顯示的數據

???????? 經常會遇到的問題是:在Web頁面(或其它類型的文檔)中顯示的信息在設計頁面時是無效的,是基于動態數據的

???????? 在這里,你可以在HTML(或其它要輸出的文本)中加入一些特定指令,FreeMarker會在輸出頁面給最終用戶時,用適當的數據替代這些代碼

???????? 下面是一個例子:

<html>

<head>

? <title>Welcome!</title>

</head>

<body>

? <h1>Welcome ${user}!</h1>

? <p>Our latest product:

? <a href="${latestProduct.url}">${latestProduct.name}</a>!

</body>

</html>?

???????? 這個例子是在簡單的HTML中加入了一些由${…}包圍的特定代碼,這些特定代碼是FreeMarker的指令,而包含FreeMarker的指令的文件就稱為模板(Template)

???????? 至于user、latestProduct.url和latestProduct.name來自于數據模型(data model)

???????? 數據模型由程序員編程來創建,向模板提供變化的信息,這些信息來自于數據庫、文件,甚至于在程序中直接生成

???????? 模板設計者不關心數據從那兒來,只知道使用已經建立的數據模型

???????? 下面是一個可能的數據模型:

(root)

? |

? +- user = "Big Joe"

? |

? +- latestProduct

????? |

????? +- url = "products/greenmouse.html"

????? |

????? +- name = "green mouse"

???????? 數據模型類似于計算機的文件系統,latestProduct可以看作是目錄,而user、url和name看作是文件,url和name文件位于latestProduct目錄中(這只是一個比喻,實際并不存在)

???????? 當FreeMarker將上面的數據模型合并到模板中,就創建了下面的輸出:

<html>

<head>

? <title>Welcome!</title>

</head>

<body>

? <h1>Welcome Big Joe!</h1>

? <p>Our latest product:

?<a href="products/greenmouse.html">green mouse</a>!

</body>

</html>?

(2)數據模型

???????? 典型的數據模型是樹型結構,可以任意復雜和深層次,如下面的例子:

(root)

? |

? +- animals

? |?? |

? |?? +- mouse

? |?? |?? |??

? |?? |?? +- size = "small"

? |?? |?? |??

? |?? |?? +- price = 50

? |?? |

? |?? +- elephant

? |?? |?? |??

? |?? |?? +- size = "large"

? |?? |?? |??

? |?? |?? +- price = 5000

? |?? |

? |?? +- python

? |?????? |??

? |?????? +- size = "medium"

? |?????? |??

? |?????? +- price = 4999

? |

? +- test = "It is a test"

? |

? +- whatnot

????? |

????? +- because = "don't know"

???????? 類似于目錄的變量稱為hashes,包含保存下級變量的唯一的查詢名字

???????? 類似于文件的變量稱為scalars,保存單值

???????? scalars保存的值有兩種類型:字符串(用引號括起,可以是單引號或雙引號)和數字(不要用引號將數字括起,這會作為字符串處理)

???????? 對scalars的訪問從root開始,各部分用“.”分隔,如animals.mouse.price

???????? 另外一種變量是sequences,和hashes類似,只是不使用變量名字,而使用數字索引,如下面的例子:

(root)

? |

? +- animals

? |?? |

? |?? +- (1st)

? |?? |?? |

? |?? |?? +- name = "mouse"

? |?? |?? |

? |?? |?? +- size = "small"

? |?? |?? |

? |?? |?? +- price = 50

? |?? |

? |?? +- (2nd)

? |?? |?? |

? |?? |?? +- name = "elephant"

? |?? |?? |

? |?? |?? +- size = "large"

? |?? |?? |

? |?? |?? +- price = 5000

? |?? |

? |?? +- (3rd)

? |?????? |

? |?????? +- name = "python"

? |?????? |

? |?????? +- size = "medium"

? |?????? |

? |?????? +- price = 4999

? |

? +- whatnot

????? |

????? +- fruits

????????? |

????????? +- (1st) = "orange"

????????? |

????????? +- (2nd) = "banana"

???????? 這種對scalars的訪問使用索引,如animals[0].name

(3)模板

???????? 在FreeMarker模板中可以包括下面三種特定部分:

????????? ${…}:稱為interpolations,FreeMarker會在輸出時用實際值進行替代

????????? FTL標記(FreeMarker模板語言標記):類似于HTML標記,為了與HTML標記區分,用#開始(有些以@開始,在后面敘述)

????????? 注釋:包含在<#--和-->(而不是<!--和-->)之間

???????? 下面是一些使用指令的例子:

????????? if指令

<#if animals.python.price < animals.elephant.price>

? Pythons are cheaper than elephants today.

<#else>

? Pythons are not cheaper than elephants today.

</#if>?

????????? list指令

<p>We have these animals:

<table border=1>

? <tr><th>Name<th>Price

? <#list animals as being>

? <tr><td>${being.name}<td>${being.price} Euros

? </#list>

</table>?

輸出為:

<p>We have these animals:

<table border=1>

? <tr><th>Name<th>Price

? <tr><td>mouse<td>50 Euros

? <tr><td>elephant<td>5000 Euros

? <tr><td>python<td>4999 Euros

</table>?

????????? include指令

<html>

<head>

? <title>Test page</title>

</head>

<body>

? <h1>Test page</h1>

? <p>Blah blah...

<#include "/copyright_footer.html">

</body>

</html>?

????????? 一起使用指令

<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>?

?

-------------------------------------------------------------
?

FreeMarker設計指南(3)

?
3、模板

(1)整體結構

???????? 模板使用FTL(FreeMarker模板語言)編寫,是下面各部分的一個組合:

????????? 文本:直接輸出

????????? Interpolation:由${和},或#{和}來限定,計算值替代輸出

????????? FTL標記:FreeMarker指令,和HTML標記類似,名字前加#予以區分,不會輸出

????????? 注釋:由<#--和-->限定,不會輸出

???????? 下面是以一個具體模板例子:

<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>?

???????? [BR]是用于換行的特殊字符序列

???????? 注意事項:

????????? 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)指令

???????? 在FreeMarker中,使用FTL標記引用指令

???????? 有三種FTL標記,這和HTML標記是類似的:

????????? 開始標記:<#directivename parameters>

????????? 結束標記:</#directivename>

????????? 空內容指令標記:<#directivename parameters/>

???????? 有兩種類型的指令:預定義指令和用戶定義指令

???????? 用戶定義指令要使用@替換#,如<@mydirective>...</@mydirective>(會在后面講述)

???????? FTL標記不能夠交叉,而應該正確的嵌套,如下面的代碼是錯誤的:

<ul>

<#list animals as being>

? <li>${being.name} for ${being.price} Euros

? <#if use = "Big Joe">

???? (except for you)

</#list>

</#if> <#-- WRONG! -->

</ul>?

???????? 如果使用不存在的指令,FreeMarker不會使用模板輸出,而是產生一個錯誤消息

???????? FreeMarker會忽略FTL標記中的空白字符,如下面的例子:

<#list[BR]

? animals?????? as[BR]

???? being[BR]

>[BR]

${being.name} for ${being.price} Euros[BR]

</#list??? >?

???????? 但是,<、</和指令之間不允許有空白字符

(3)表達式

???????? 直接指定值

????????? 字符串

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 (u000D)
?

\t
?
Tab (u0009)
?

\b
?
Backspace (u0008)
?

\f
?
Form feed (u000C)
?

\l
?
<?
?

\g
?
>?
?

\a
?
&
?

\{
?
{
?

\xCode
?
4位16進制Unicode代碼
?


n???????? 有一類特殊的字符串稱為raw字符串,被認為是純文本,其中的\和{等不具有特殊含義,該類字符串在引號前面加r,下面是一個例子:

${r"${foo}"}

${r"C:\foo\bar"}?

輸出的結果是:

${foo}

C:\foo\bar?

????????? 數字

n???????? 直接輸入,不需要引號

n???????? 精度數字使用“.”分隔,不能使用分組符號

n???????? 目前版本不支持科學計數法,所以“1E3”是錯誤的

n???????? 不能省略小數點前面的0,所以“.5”是錯誤的

n???????? 數字8、+8、08和8.00都是相同的

????????? 布爾值

n???????? true和false,不使用引號

????????? 序列

n???????? 由逗號分隔的子變量列表,由方括號限定,下面是一個例子:

<#list ["winter", "spring", "summer", "autumn"] as x>

${x}

</#list>

輸出的結果是:

winter

spring

summer

autumn

n???????? 列表的項目是表達式,所以可以有下面的例子:

[2 + 2, [1, 2, 3, 4], "whatnot"]

n???????? 可以使用數字范圍定義數字序列,例如2..5等同于[2, 3, 4, 5],但是更有效率,注意數字范圍沒有方括號

n???????? 可以定義反遞增的數字范圍,如5..2

????????? 散列(hash)

n???????? 由逗號分隔的鍵/值列表,由大括號限定,鍵和值之間用冒號分隔,下面是一個例子:

{"name":"green mouse", "price":150}

n???????? 鍵和值都是表達式,但是鍵必須是字符串

???????? 獲取變量

????????? 頂層變量: ${variable},變量名只能是字母、數字、下劃線、$、@和#的組合,且不能以數字開頭

????????? 從散列中獲取數據

n???????? 可以使用點語法或方括號語法,假設有下面的數據模型:

(root)

|

+- book

|?? |

|?? +- title = "Breeding green mouses"

|?? |

|?? +- author

|?????? |

|?????? +- name = "Julia Smith"

|?????? |

|?????? +- info = "Biologist, 1923-1985, Canada"

|

+- test = "title"

下面都是等價的:

book.author.name

book["author"].name

book.author.["name"]

book["author"]["name"]

n???????? 使用點語法,變量名字有頂層變量一樣的限制,但方括號語法沒有該限制,因為名字是任意表達式的結果

????????? 從序列獲得數據:和散列的方括號語法語法一樣,只是方括號中的表達式值必須是數字;注意:第一個項目的索引是0

????????? 序列片斷:使用[startIndex..endIndex]語法,從序列中獲得序列片斷(也是序列);startIndex和endIndex是結果為數字的表達式

????????? 特殊變量:FreeMarker內定義變量,使用.variablename語法訪問

???????? 字符串操作

????????? Interpolation(或連接操作)

n???????? 可以使用${..}(或#{..})在文本部分插入表達式的值,例如:

${"Hello ${user}!"}

${"${user}${user}${user}${user}"}?

n???????? 可以使用+操作符獲得同樣的結果

${"Hello " + user + "!"}

${user + user + user + user}

n???????? ${..}只能用于文本部分,下面的代碼是錯誤的:

<#if ${isBig}>Wow!</#if>

<#if "${isBig}">Wow!</#if>

應該寫成:

<#if isBig>Wow!</#if>

????????? 子串

n???????? 例子(假設user的值為“Big Joe”):

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

${user[1..4]}

結果是(注意第一個字符的索引是0):

BJ

ig J

???????? 序列操作

????????? 連接操作:和字符串一樣,使用+,下面是一個例子:

<#list ["Joe", "Fred"] + ["Julia", "Kate"] as user>

- ${user}

</#list>

輸出結果是:

- Joe

- Fred

- Julia

- Kate

???????? 散列操作

????????? 連接操作:和字符串一樣,使用+,如果具有相同的key,右邊的值替代左邊的值,例如:

<#assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}>

- Joe is ${ages.Joe}

- Fred is ${ages.Fred}

- Julia is ${ages.Julia}?

輸出結果是:

- Joe is 30

- Fred is 25

- Julia is 18?

???????? 算術運算

????????? +、-、×、/、%,下面是一個例子:

${x * x - 100}

${x / 2}

${12 % 10}

輸出結果是(假設x為5):

-75

2.5

2?

????????? 操作符兩邊必須是數字,因此下面的代碼是錯誤的:

${3 * "5"} <#-- WRONG! -->?

????????? 使用+操作符時,如果一邊是數字,一邊是字符串,就會自動將數字轉換為字符串,例如:

${3 + "5"}?

輸出結果是:

35

????????? 使用內建的int(后面講述)獲得整數部分,例如:

${(x/2)?int}

${1.1?int}

${1.999?int}

${-1.1?int}

${-1.999?int}

輸出結果是(假設x為5):

2

1

1

-1

-1

???????? 比較操作符

????????? 使用=(或==,完全相等)測試兩個值是否相等,使用!= 測試兩個值是否不相等

????????? =和!=兩邊必須是相同類型的值,否則會產生錯誤,例如<#if 1 = "1">會引起錯誤

????????? Freemarker是精確比較,所以對"x"、"x? "和"X"是不相等的

????????? 對數字和日期可以使用<、<=、>和>=,但不能用于字符串

????????? 由于Freemarker會將>解釋成FTL標記的結束字符,所以對于>和>=可以使用括號來避免這種情況,例如<#if (x > y)>

????????? 另一種替代的方法是,使用lt、lte、gt和gte來替代<、<=、>和>=

???????? 邏輯操作符

????????? &&(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>?

???????? 內建函數

????????? 內建函數的用法類似訪問散列的子變量,只是使用“?”替代“.”,下面列出常用的一些函數

????????? 字符串使用的:

n???????? html:對字符串進行HTML編碼

n???????? cap_first:使字符串第一個字母大寫

n???????? lower_case:將字符串轉換成小寫

n???????? upper_case:將字符串轉換成大寫

n???????? trim:去掉字符串前后的空白字符

????????? 序列使用的:

n???????? size:獲得序列中元素的數目

????????? 數字使用的:

n???????? int:取得數字的整數部分(如-1.9?int的結果是-1)

????????? 例子(假設test保存字符串"Tom & Jerry"):

${test?html}

${test?upper_case?html}

輸出結果是:

Tom &amp; Jerry

TOM &amp; JERRY?

???????? 操作符優先順序?
操作符組
?
操作符
?

后綴
?
[subvarName] [subStringRange] . (methodParams)
?

一元
?
+expr、-expr、!
?

內建
?
?
?

乘法
?
*、 / 、%
?

加法
?
+、-
?

關系
?
<、>、<=、>=(lt、lte、gt、gte)
?

相等
?
==(=)、!=
?

邏輯and
?
&&
?

邏輯or
?
||
?

數字范圍
?
..
?


(4)Interpolation

???????? Interpolation有兩種類型:

????????? 通用Interpolation:${expr}

????????? 數字Interpolation:#{expr}或#{expr; format}

???????? 注意:Interpolation只能用于文本部分

???????? 通用Interpolation

????????? 插入字符串值:直接輸出表達式結果

????????? 插入數字值:根據缺省格式(由#setting指令設置)將表達式結果轉換成文本輸出;可以使用內建函數string格式化單個Interpolation,下面是一個例子:

<#setting number_format="currency"/>

<#assign answer=42/>

${answer}

${answer?string}? <#-- the same as ${answer} -->

${answer?string.number}

${answer?string.currency}

${answer?string.percent}

輸出結果是:

$42.00

$42.00

42

$42.00

4,200%

????????? 插入日期值:根據缺省格式(由#setting指令設置)將表達式結果轉換成文本輸出;可以使用內建函數string格式化單個Interpolation,下面是一個使用格式模式的例子:

${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')'")}?

輸出的結果類似下面的格式:

2003-04-08 21:24:44 Pacific Daylight Time

Tue, Apr 8, '03

Tuesday, April 08, 2003, 09:24:44 PM (PDT)

????????? 插入布爾值:根據缺省格式(由#setting指令設置)將表達式結果轉換成文本輸出;可以使用內建函數string格式化單個Interpolation,下面是一個例子:

<#assign foo=true/>

${foo?string("yes", "no")}

輸出結果是:

yes

???????? 數字Interpolation的#{expr; format}形式可以用來格式化數字,format可以是:

????????? mX:小數部分最小X位

????????? MX:小數部分最大X位

????????? 例子:

?????????? <#-- If the language is US English the output is: -->

<#assign x=2.582/>

<#assign y=4/>

#{x; M2}?? <#-- 2.58 -->

#{y; M2}?? <#-- 4??? -->

#{x; m1}?? <#-- 2.6 -->

#{y; m1}?? <#-- 4.0 -->

#{x; m1M2} <#-- 2.58 -->

#{y; m1M2} <#-- 4.0? -->

?
-----------------------------------------------------------

?

FreeMarker設計指南(4)

4、雜項

(1)用戶定義指令

???????? 宏和變換器變量是兩種不同類型的用戶定義指令,它們之間的區別是宏是在模板中使用macro指令定義,而變換器是在模板外由程序定義,這里只介紹宏

???????? 基本用法

????????? 宏是和某個變量關聯的模板片斷,以便在模板中通過用戶定義指令使用該變量,下面是一個例子:

<#macro greet>

? <font size="+2">Hello Joe!</font>

</#macro>?

????????? 作為用戶定義指令使用宏變量時,使用@替代FTL標記中的#

<@greet></@greet>

????????? 如果沒有體內容,也可以使用:

<@greet/>

???????? 參數

????????? 在macro指令中可以在宏變量之后定義參數,如:

<#macro greet person>

? <font size="+2">Hello ${person}!</font>

</#macro>

????????? 可以這樣使用這個宏變量:

<@greet person="Fred"/> and <@greet person="Batman"/>

輸出結果是:

? <font size="+2">Hello Fred!</font>

and?? <font size="+2">Hello Batman!</font>

?

????????? 宏的參數是FTL表達式,所以下面的代碼具有不同的意思:

<@greet person=Fred/>

????????? 這意味著將Fred變量的值傳給person參數,該值不僅是字符串,還可以是其它類型,甚至是復雜的表達式

????????? 宏可以有多參數,下面是一個例子:

<#macro greet person color>

? <font size="+2" color="${color}">Hello ${person}!</font>

</#macro>

????????? 可以這樣使用該宏變量:

<@greet person="Fred" color="black"/>

????????? 其中參數的次序是無關的,因此下面是等價的:

<@greet color="black" person="Fred"/>

????????? 只能使用在macro指令中定義的參數,并且對所有參數賦值,所以下面的代碼是錯誤的:

<@greet person="Fred" color="black" background="green"/>

<@greet person="Fred"/>

????????? 可以在定義參數時指定缺省值,如:

<#macro greet person color="black">

? <font size="+2" color="${color}">Hello ${person}!</font>

</#macro>?

????????? 這樣<@greet person="Fred"/>就正確了

????????? 宏的參數是局部變量,只能在宏定義中有效

???????? 嵌套內容

????????? 用戶定義指令可以有嵌套內容,使用<#nested>指令執行指令開始和結束標記之間的模板片斷

????????? 例子:

<#macro border>

? <table border=4 cellspacing=0 cellpadding=4><tr><td>

??? <#nested>

? </tr></td></table>

</#macro>?

這樣使用該宏變量:

<@border>The bordered text</@border>

輸出結果:

? <table border=4 cellspacing=0 cellpadding=4><tr><td>

??? The bordered text

? </tr></td></table>

?

????????? <#nested>指令可以被多次調用,例如:

<#macro do_thrice>

? <#nested>

? <#nested>

? <#nested>

</#macro>

<@do_thrice>

? Anything.

</@do_thrice>?

輸出結果:

? Anything.

? Anything.

? Anything.

????????? 嵌套內容可以是有效的FTL,下面是一個有些復雜的例子:

<@border>

? <ul>

? <@do_thrice>

??? <li><@greet person="Joe"/>

? </@do_thrice>

? </ul>

</@border>

輸出結果:

? <table border=4 cellspacing=0 cellpadding=4><tr><td>

????? <ul>

??? <li><font size="+2">Hello Joe!</font>

?

??? <li><font size="+2">Hello Joe!</font>

?

??? <li><font size="+2">Hello Joe!</font>

?

? </ul>

?

? </tr></td></table>?

????????? 宏定義中的局部變量對嵌套內容是不可見的,例如:

<#macro repeat count>

? <#local y = "test">

? <#list 1..count as x>

??? ${y} ${count}/${x}: <#nested>

? </#list>

</#macro>

<@repeat count=3>${y?default("?")} ${x?default("?")} ${count?default("?")}</@repeat>

輸出結果:

??? test 3/1: ? ? ?

??? test 3/2: ? ? ?

??? test 3/3: ? ? ?

??????????

???????? 在宏定義中使用循環變量

????????? 用戶定義指令可以有循環變量,通常用于重復嵌套內容,基本用法是:作為nested指令的參數傳遞循環變量的實際值,而在調用用戶定義指令時,在<@…>開始標記的參數后面指定循環變量的名字

????????? 例子:

<#macro repeat count>

? <#list 1..count as x>

??? <#nested x, x/2, x==count>

? </#list>

</#macro>

<@repeat count=4 ; c, halfc, last>

? ${c}. ${halfc}<#if last> Last!</#if>

</@repeat>?

輸出結果:

? 1. 0.5

? 2. 1

? 3. 1.5

? 4. 2 Last!

?

????????? 指定的循環變量的數目和用戶定義指令開始標記指定的不同不會有問題

n???????? 調用時少指定循環變量,則多指定的值不可見

n???????? 調用時多指定循環變量,多余的循環變量不會被創建

(2)在模板中定義變量

???????? 在模板中定義的變量有三種類型:

????????? plain變量:可以在模板的任何地方訪問,包括使用include指令插入的模板,使用assign指令創建和替換

????????? 局部變量:在宏定義體中有效,使用local指令創建和替換

????????? 循環變量:只能存在于指令的嵌套內容,由指令(如list)自動創建;宏的參數是局部變量,而不是循環變量

???????? 局部變量隱藏(而不是覆蓋)同名的plain變量;循環變量隱藏同名的局部變量和plain變量,下面是一個例子:

<#assign x = "plain">

1. ${x}? <#-- we see the plain var. here -->

<@test/>

6. ${x}? <#-- the value of plain var. was not changed -->

<#list ["loop"] as x>

??? 7. ${x}? <#-- now the loop var. hides the plain var. -->

??? <#assign x = "plain2"> <#-- replace the plain var, hiding does not mater here -->

??? 8. ${x}? <#-- it still hides the plain var. -->

</#list>

9. ${x}? <#-- the new value of plain var. -->

?

<#macro test>

? 2. ${x}? <#-- we still see the plain var. here -->

? <#local x = "local">

? 3. ${x}? <#-- now the local var. hides it -->

? <#list ["loop"] as x>

??? 4. ${x}? <#-- now the loop var. hides the local var. -->

? </#list>

? 5. ${x}? <#-- now we see the local var. again -->

</#macro>?

輸出結果:

1. plain

? 2. plain

? 3. local

??? 4. loop

? 5. local

6. plain

??? 7. loop

??? 8. loop

9. plain2

?

???????? 內部循環變量隱藏同名的外部循環變量,如:

<#list ["loop 1"] as x>

? ${x}

? <#list ["loop 2"] as x>

??? ${x}

??? <#list ["loop 3"] as x>

????? ${x}

??? </#list>

??? ${x}

? </#list>

? ${x}

</#list>

輸出結果:

? loop 1

??? loop 2

????? loop 3

??? loop 2

? loop 1

???????? 模板中的變量會隱藏(而不是覆蓋)數據模型中同名變量,如果需要訪問數據模型中的同名變量,使用特殊變量global,下面的例子假設數據模型中的user的值是Big Joe:

<#assign user = "Joe Hider">

${user}????????? <#-- prints: Joe Hider -->

${.globals.user} <#-- prints: Big Joe -->?

(3)名字空間

???????? 通常情況,只使用一個名字空間,稱為主名字空間

???????? 為了創建可重用的宏、變換器或其它變量的集合(通常稱庫),必須使用多名字空間,其目的是防止同名沖突

???????? 創建庫

????????? 下面是一個創建庫的例子(假設保存在lib/my_test.ftl中):

<#macro copyright date>

? <p>Copyright (C) ${date} Julia Smith. All rights reserved.

? <br>Email: ${mail}</p>

</#macro>?

<#assign mail = "jsmith@acme.com">

????????? 使用import指令導入庫到模板中,Freemarker會為導入的庫創建新的名字空間,并可以通過import指令中指定的散列變量訪問庫中的變量:

<#import "/lib/my_test.ftl" as my>

<#assign mail="fred@acme.com">

<@my.copyright date="1999-2002"/>

${my.mail}

${mail}?

輸出結果:

? <p>Copyright (C) 1999-2002 Julia Smith. All rights reserved.

? <br>Email:?jsmith@acme.com</p>

jsmith@acme.com

fred@acme.com?

可以看到例子中使用的兩個同名變量并沒有沖突,因為它們位于不同的名字空間

???????? 可以使用assign指令在導入的名字空間中創建或替代變量,下面是一個例子:

<#import "/lib/my_test.ftl" as my>

${my.mail}

<#assign mail="jsmith@other.com" in my>

${my.mail}?

???????? 輸出結果:

jsmith@acme.com

jsmith@other.com?

???????? 數據模型中的變量任何地方都可見,也包括不同的名字空間,下面是修改的庫:

<#macro copyright date>

? <p>Copyright (C) ${date} ${user}. All rights reserved.</p>

</#macro>

<#assign mail = "${user}@acme.com">??

???????? 假設數據模型中的user變量的值是Fred,則下面的代碼:

<#import "/lib/my_test.ftl" as my>

<@my.copyright date="1999-2002"/>

${my.mail}??

???????? 輸出結果:

? <p>Copyright (C) 1999-2002 Fred. All rights reserved.</p>

注釋:包含在<#--和-->

<#local y = "test"> 定義局部變量

<#import "/lib/my_test.ftl" as my> 導入模板文件 指定名字空間 my

<#macro greet> ? ??用戶定義指令

? <font size="+2">Hello Joe!</font>

</#macro>?

????????? 作為用戶定義指令使用宏變量時,使用@替代FTL標記中的#

<@greet></@greet>

????????? 如果沒有體內容,也可以使用:

<@greet/>

<#macro greet person>

? <font size="+2">Hello ${person}!</font>

</#macro>

????????? 可以這樣使用這個宏變量:

<@greet person="Fred"/> and <@greet person="Batman"/>

輸出結果是:

? <font size="+2">Hello Fred!</font>

and?? <font size="+2">Hello Batman!</font>

用戶定義指令可以有嵌套內容,使用<#nested>指令執行指令開始和結束標記之間的模板片斷

????????? 例子:

<#macro border>

? <table border=4 cellspacing=0 cellpadding=4><tr><td>

??? <#nested>

? </tr></td></table>

</#macro>?

?

?

?if指令

<#if animals.python.price < animals.elephant.price>

? Pythons are cheaper than elephants today.

<#else>

? Pythons are not cheaper than elephants today.

</#if>?

?

?

?list指令

? <#list animals as being>

??<tr><td>${being.name}<td>${being.price} Euros

? </#list>

?

? <#list ["winter", "spring", "summer", "autumn"] as x>

? ? ? ?${x}

? </#list>

<#list ["Joe", "Fred"] + ["Julia", "Kate"] as user>

- ${user}

</#list>

輸出結果是:

- Joe

- Fred

- Julia

- Kate

?

include指令

<#include "/copyright_footer.html">

?

?

有一類特殊的字符串稱為raw字符串,被認為是純文本,其中的\和{等不具有特殊含義,該類字符串在引號前面加r,下面是一個例子:

${r"${foo}"}

${r"C:\foo\bar"}?

輸出的結果是:

${foo}

C:\foo\bar?

?

?

<#assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}>

- Joe is ${ages.Joe}

- Fred is ${ages.Fred}

- Julia is ${ages.Julia}?

輸出結果是:

- Joe is 30

- Fred is 25

- Julia is 18?

?

?由于Freemarker會將>解釋成FTL標記的結束字符,所以對于>和>=可以使用括號來避免這種情況,例如

<#if (x > y)>

?

?

內建函數

????????? 內建函數的用法類似訪問散列的子變量,只是使用“?”替代“.”,下面列出常用的一些函數

????????? 字符串使用的:

n???????? html:對字符串進行HTML編碼

n???????? cap_first:使字符串第一個字母大寫

n???????? lower_case:將字符串轉換成小寫

n???????? upper_case:將字符串轉換成大寫

n???????? trim:去掉字符串前后的空白字符

????????? 序列使用的:

n???????? size:獲得序列中元素的數目

????????? 數字使用的:

n???????? int:取得數字的整數部分(如-1.9?int的結果是-1)

????????? 例子(假設test保存字符串"Tom & Jerry"):

${test?html}

${test?upper_case?html}

輸出結果是:

Tom &amp; Jerry

TOM &amp; JERRY?

?

?

string格式化單個Interpolation,下面是一個例子:

<#setting number_format="currency"/>

<#assign answer=42/>

${answer}

${answer?string}? <#-- the same as ${answer} -->

${answer?string.number}

${answer?string.currency}

${answer?string.percent}

輸出結果是:

$42.00

$42.00

42

$42.00

4,200%

?

?

????????? 插入日期值:根據缺省格式(由#setting指令設置)將表達式結果轉換成文本輸出;可以使用內建函數string格式化單個Interpolation,下面是一個使用格式模式的例子:

${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')'")}?

輸出的結果類似下面的格式:

2003-04-08 21:24:44 Pacific Daylight Time

Tue, Apr 8, '03

Tuesday, April 08, 2003, 09:24:44 PM (PDT)

?

?

????????? 插入布爾值:根據缺省格式(由#setting指令設置)將表達式結果轉換成文本輸出;可以使用內建函數string格式化單個Interpolation,下面是一個例子:

<#assign foo=true/>

${foo?string("yes", "no")}

輸出結果是:

yes

?

?

?

? 數字Interpolation的#{expr; format}形式可以用來格式化數字,format可以是:

????????? mX:小數部分最小X位

????????? MX:小數部分最大X位

????????? 例子:

?????????? <#-- If the language is US English the output is: -->

<#assign x=2.582/>

<#assign y=4/>

#{x; M2}?? <#-- 2.58 -->

#{y; M2}?? <#-- 4??? -->

#{x; m1}?? <#-- 2.6 -->

#{y; m1}?? <#-- 4.0 -->

#{x; m1M2} <#-- 2.58 -->

#{y; m1M2} <#-- 4.0? -->

?

?

使用import指令導入庫到模板中,Freemarker會為導入的庫創建新的名字空間,并可以通過import指令中指定的散列變量訪問庫中的變量:

<#import "/lib/my_test.ftl" as my>

<#assign mail="fred@acme.com">

<@my.copyright date="1999-2002"/>

${my.mail}

${mail}?

輸出結果:

? <p>Copyright (C) 1999-2002 Julia Smith. All rights reserved.

? <br>Email:?jsmith@acme.com</p>

jsmith@acme.com

fred@acme.com?

轉載于:https://www.cnblogs.com/wwicked/articles/4466653.html

總結

以上是生活随笔為你收集整理的FreeMarker中文API手册(完整)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产精品一区二区三区久久 | 久久久免费视频播放 | 欧美日韩精品在线一区二区 | 欧美资源在线观看 | 开心色婷婷 | 四虎5151久久欧美毛片 | 国产91影视| 久久久精品久久日韩一区综合 | 天天天天天天干 | 在线观看视频你懂得 | 国内精品久久久久久久 | 一级国产视频 | 午夜在线免费观看视频 | 91资源在线视频 | 国产一级片视频 | 亚洲成人精品av | 久久婷婷久久 | 狠狠色丁香婷婷综合 | 国产精品久久久久久av | 97超碰中文字幕 | 亚洲综合爱 | 国产在线精品播放 | 一区二区三区电影在线播 | 看黄色91| 天天天色| 欧美 日韩 久久 | 欧美网址在线观看 | 亚洲黄色免费电影 | 国产视频精品网 | 成人av直播 | 精品国产aⅴ麻豆 | 亚洲一级黄色片 | 97韩国电影| 久久综合婷婷国产二区高清 | 91视频成人免费 | 夜夜视频欧洲 | 91视频com | 中文字幕一区二区三区在线观看 | 99精品国产福利在线观看免费 | 日韩av进入 | 精品在线视频观看 | 黄色av网站在线观看免费 | av丝袜制服| 在线免费观看视频a | 黄色av电影在线观看 | 婷婷六月天在线 | 97成人精品视频在线观看 | 麻豆传媒视频观看 | 最近中文字幕免费视频 | 国产区免费在线 | 日韩一级黄色大片 | 欧美激情综合五月色丁香 | 中文字幕在线免费 | 日日干夜夜草 | 五月天久久激情 | 国产精品久久久久国产精品日日 | 国产精品对白一区二区三区 | 国产亚洲精品久久久网站好莱 | 日韩高清观看 | 日韩中文字幕电影 | 欧美精品xx| 亚洲伊人成综合网 | 国产亚洲精品久久久久久网站 | 色吊丝在线永久观看最新版本 | 最近中文字幕mv免费高清在线 | 蜜臀久久99精品久久久久久网站 | 国产免费人成xvideos视频 | 国产精品午夜免费福利视频 | 91精品麻豆| 久久成人人人人精品欧 | 中文字幕在线播放视频 | 黄色一级网 | 天天色成人 | 国产精品手机视频 | 国产福利久久 | 久久精品国产一区二区电影 | 久久香蕉一区 | 成人免费观看视频网站 | 狠狠操影视 | 国产美女精品久久久 | 久久综合免费视频 | 天天艹天天干天天 | 亚洲精品av中文字幕在线在线 | 99色婷婷| 亚洲精品欧美成人 | 1024久久| 欧洲精品二区 | 久久国产精品二国产精品中国洋人 | 久久精品人人做人人综合老师 | 狠狠色丁香久久婷婷综合五月 | 精品国产伦一区二区三区观看说明 | 久久精品一级片 | 国产亚洲精品久久久久久电影 | 免费网站在线观看成人 | 日韩网站在线免费观看 | 久久久久久久久久久久国产精品 | 日韩免费一级电影 | 国精产品满18岁在线 | 在线不卡的av| 一区二区电影网 | 婷婷激情影院 | 夜色资源站国产www在线视频 | 欧美成人一二区 | 91精品久久久久久久久久入口 | 91亚洲精品久久久 | 91精品国自产在线偷拍蜜桃 | 天天摸天天操天天爽 | 成人亚洲精品久久久久 | 亚洲国产精品一区二区久久,亚洲午夜 | 色婷婷国产精品一区在线观看 | 狠狠色丁香婷婷综合 | 成人教育av | 国产精品成人av久久 | 99久久久国产精品免费观看 | 在线中文字幕播放 | 久久久www成人免费毛片麻豆 | 91成人精品一区在线播放 | 亚洲精品黄网站 | 911国产| 美女在线观看av | 婷婷丁香色综合狠狠色 | 手机在线欧美 | 日韩黄色一级电影 | 久草电影免费在线观看 | 91精品秘密在线观看 | 免费在线一区二区 | 久久久久电影 | 成年人天堂com | 成人av电影在线 | 一区二区中文字幕在线播放 | 精品国产伦一区二区三区 | 国产91影院 | 欧美日韩精品在线观看视频 | 欧美日韩一区二区在线观看 | 狠狠色婷婷丁香六月 | 青草视频在线免费 | 午夜精品久久久久久久99水蜜桃 | a在线免费观看视频 | 在线观看欧美成人 | 97超碰免费在线 | 久久9视频 | 韩国av三级| 日韩在线观看第一页 | 波多野结衣在线中文字幕 | 丁香色综合 | 天天综合网久久综合网 | 麻豆av一区二区三区在线观看 | 99精品视频99| 国产一级视屏 | 久艹视频在线观看 | 国产在线观看你懂的 | 在线播放视频一区 | 国产黄色特级片 | 中文字幕在线免费97 | 欧美精品一区二区三区一线天视频 | 国产一级二级三级视频 | 国产麻豆精品传媒av国产下载 | 中文字幕a∨在线乱码免费看 | 国产玖玖精品视频 | www久久精品 | 天天操天天舔天天干 | 五月天久久综合 | 欧美日韩亚洲在线观看 | 亚洲成人黄色在线观看 | 一区二区三区不卡在线 | 91成版人在线观看入口 | 欧美精品乱码久久久久久 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 精品国产一区二区三区免费 | 欧美日韩在线观看一区二区 | 欧美日韩一级视频 | 欧美国产在线看 | 天天玩天天操天天射 | 超碰在97| 久99久视频 | 亚洲婷婷在线 | 激情久久久久久久久久久久久久久久 | 成人av在线网 | 亚洲高清久久久 | 亚洲视频在线播放 | 国产精品网在线观看 | 久久久精品一区二区三区 | 国产精品精品久久久久久 | 久久草在线免费 | 亚洲国产精品资源 | 天天操天天添 | 免费涩涩网站 | 西西44人体做爰大胆视频 | 狠狠狠狠狠狠操 | 欧美日韩国产精品一区二区亚洲 | 天天操天天干天天摸 | 在线观看免费成人av | 久久人人爽人人爽 | 亚洲成a人片在线观看网站口工 | 久影院| 最近中文字幕免费av | 日日爱影视 | 欧美激情精品久久久 | 天天爽夜夜爽人人爽曰av | 成人影视免费看 | 伊人久久在线观看 | 国产精品中文 | 免费一级片在线观看 | 久久精品1区2区 | 国产69精品久久久久久 | 91丨九色丨蝌蚪丨老版 | av网址最新 | 久久av影视| 国产一区黄色 | 精品视频123区在线观看 | 香蕉视频色 | 天天操天天弄 | 99re8这里有精品热视频免费 | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产精品一二 | 中文在线字幕观看电影 | 久久国产精品久久w女人spa | 国产乱码精品一区二区蜜臀 | 亚洲精品永久免费视频 | 91视频在线看 | 一区三区在线欧 | 一本大道久久精品懂色aⅴ 五月婷社区 | 精品一区电影 | 91麻豆免费版 | 精品久操 | 夜夜澡人模人人添人人看 | 一区二区视频在线免费观看 | 亚洲视频在线免费观看 | 曰本三级在线 | 国产精品视频内 | 92av视频| 久久久亚洲麻豆日韩精品一区三区 | 亚洲特级毛片 | 精品国产伦一区二区三区观看体验 | 久久99久久久久久 | 中字幕视频在线永久在线观看免费 | av网站免费线看精品 | 中文字幕高清在线 | 亚洲欧美日韩精品久久久 | 久久久久在线视频 | 亚洲桃花综合 | 日本三级久久久 | 国产美女视频免费 | 午夜久久影视 | 福利网在线 | 精品亚洲va在线va天堂资源站 | 天天操天天干天天干 | 4438全国亚洲精品观看视频 | av网站在线观看免费 | 色国产在线 | 欧美特一级| 成人黄色毛片 | 国产无遮挡又黄又爽在线观看 | 全黄色一级片 | av永久网址 | 成人在线一区二区 | 国产精品午夜久久久久久99热 | 五月天久久久 | 午夜精品999| 91精品国产综合久久福利 | 久久国产精品久久精品国产演员表 | 一区二区三区在线电影 | 国产成人精品区 | 福利一区二区在线 | 黄色网在线播放 | 色橹橹欧美在线观看视频高清 | 国产一区二区三区 在线 | 欧美激情视频在线观看免费 | 国产破处在线视频 | 射久久久 | 中文在线www | 亚洲在线资源 | 在线中文字幕网站 | 狠狠干网址 | 日韩网站在线播放 | 久久国产精品网站 | 免费在线观看一区 | 色综合天天综合在线视频 | 国产区第一页 | 久久久久久久毛片 | 成人精品福利 | 日日爽 | 国产激情小视频在线观看 | 久久久精品国产免费观看同学 | 超碰久热| 国产黄在线| 精品中文字幕视频 | 日本少妇高清做爰视频 | 国产午夜精品一区二区三区 | 亚洲精品久久激情国产片 | 九九久久国产 | 久久久久久久久免费视频 | 日韩精品播放 | 日本大尺码专区mv | 开心色激情网 | 久草视频免费看 | 日日久视频 | 日韩av三区 | 午夜av不卡 | 成人h动漫精品一区二 | 香蕉影院在线播放 | 这里只有精品视频在线观看 | 在线 国产 亚洲 欧美 | 亚洲专区欧美专区 | 久久综合九色综合欧美就去吻 | 欧美一级电影片 | av超碰在线| www.伊人网| 欧洲精品久久久久毛片完整版 | 曰本三级在线 | 日韩有码欧美 | 黄色免费网站大全 | 中文在线资源 | 午夜精品久久久久久久99婷婷 | 成人毛片久久 | 97天堂| 成人羞羞免费 | 九九九在线观看视频 | 99精品一区二区三区 | 日韩艹| 国产18精品乱码免费看 | 精品国产一区二区三区av性色 | av在线免费播放网站 | 五月婷婷一级片 | 亚洲精品在线观看av | 久久国产三级 | 999在线精品 | 精品av网站 | 久草视频免费在线观看 | 亚洲六月丁香色婷婷综合久久 | 久久久麻豆 | 国产精品美女999 | 99热精品国产 | 国产免费视频一区二区裸体 | 91亚洲精品国产 | 97精品国产一二三产区 | 狠狠色噜噜狠狠 | 亚洲视频播放 | 久久在线看| 国产精品第54页 | 免费日韩av片| 91九色精品国产 | 亚洲黄色片一级 | 欧美精品v国产精品v日韩精品 | 欧美一级黄色网 | av在线免费观看不卡 | 日韩精品一区二区在线观看视频 | 国产精品毛片久久久久久久久久99999999 | 亚洲精品国产高清 | 在线免费观看成人 | 天天操天天能 | 成人久久精品 | 亚洲精品男人天堂 | 久草a在线| 久久国产区 | www国产亚洲精品久久麻豆 | 婷婷六月综合网 | 国产精品一区二区久久国产 | 顶级欧美色妇4khd | 亚洲最新视频在线 | 最近免费观看的电影完整版 | 人人澡人人草 | 亚洲欧洲成人精品av97 | 成人久久精品视频 | 亚洲精品国产精品乱码不99热 | 婷婷开心久久网 | 国产一区高清在线观看 | 久久国产日韩 | 国产亚洲免费观看 | 久久久高清一区二区三区 | www.com在线观看 | 国产一级免费片 | 日韩成人免费在线 | 婷婷久久网站 | 日本久久高清视频 | 精品久久久久久久久久久久久 | free. 性欧美.com | 久久 国产一区 | 悠悠av资源片 | 久草国产视频 | 在线观看黄网站 | 久久男人免费视频 | 国产在线观看 | 在线观看 国产 | 久久精品香蕉 | 在线小视频你懂的 | 97偷拍在线视频 | 亚洲精品乱码久久久久 | 日本在线中文在线 | 久久婷婷影视 | 91 中文字幕 | 操老逼免费视频 | 欧美日韩在线免费观看 | 国产97在线播放 | 91理论片午午伦夜理片久久 | 91亚色视频在线观看 | 国产高清在线观看av | 午夜视频亚洲 | 久久看看 | 9在线观看免费高清完整版 玖玖爱免费视频 | 国产a级免费 | 免费h精品视频在线播放 | 久久99国产精品自在自在app | 99精品久久久久 | 人人看人人爱 | 超碰在线9 | 亚洲三级性片 | 美女网站在线播放 | 中文在线天堂资源 | 91中文字幕网 | 亚洲成年人在线播放 | 综合网中文字幕 | 国产午夜小视频 | 欧美性生活免费 | 亚洲精品乱码久久久久久高潮 | 日韩欧美观看 | 欧美一二三区播放 | 亚洲精品乱码久久久久久蜜桃欧美 | 97香蕉视频 | 亚洲资源视频 | 午夜视频在线观看一区 | 国产精品第一 | 日韩h在线观看 | 日本精品久久久久中文字幕 | 91福利区一区二区三区 | 天天综合中文 | 五月天激情视频在线观看 | 国产日韩精品在线观看 | 国产精品久久久久久一区二区三区 | 香蕉久草在线 | 日韩有色| 色综合亚洲精品激情狠狠 | 日日爽日日操 | 国产96视频| 久久老司机精品视频 | 国产精品99视频 | 奇米网8888 | 久久毛片高清国产 | 久草视频在线资源站 | 国产高清成人 | 狠狠干天天射 | 天天狠狠 | 国产在线观看二区 | 免费日韩在线 | 久久国产影视 | 丁香五月缴情综合网 | 91九色porny蝌蚪主页 | 中文字幕在 | 91视频免费网站 | 国产无区一区二区三麻豆 | 久草视频在线播放 | www久久九 | 亚洲另类人人澡 | 爱爱一区 | 午夜精品久久一牛影视 | 久久精品激情 | 久久看毛片 | 黄色网址a | 91免费网 | 91成人在线看 | 亚洲精品乱码久久久久v最新版 | 色中文字幕在线观看 | 91在线观| 人人草在线视频 | 久久亚洲欧美 | 久久久精品日本 | 欧美精品亚洲精品日韩精品 | 欧美大片大全 | 久久人人爽人人爽人人 | 亚洲黄污| 激情深爱 | 亚洲资源在线网 | 在线播放 日韩专区 | 国产在线观看高清视频 | 国产精品久久久久久久久岛 | 精品美女久久久久久免费 | 缴情综合网五月天 | 91在线精品视频 | 免费视频网 | 天天操天天射天天爽 | 国产精品久久久久久欧美 | 亚洲综合网站在线观看 | 久久免费成人网 | 国产xxxx做受性欧美88 | 黄色一级大片在线观看 | 成人毛片100免费观看 | 成年人在线看片 | 国产精品久久精品 | 日韩av在线高清 | 91女神的呻吟细腰翘臀美女 | 色婷婷色 | 日韩视频一区二区三区 | 婷婷久久一区 | 亚洲精品视频网站在线观看 | 欧美99精品 | 国产精品资源在线观看 | 日韩中文免费视频 | 一级一片免费视频 | 亚洲欧美成人在线 | 亚洲一区二区黄色 | 黄色av电影网 | 99热这里只有精品免费 | 免费黄色av电影 | 日韩影视大全 | 欧美视频在线二区 | 久久看片 | 亚洲美女久久 | a电影免费看 | 欧美日韩在线播放 | 精品国产理论 | 最近日本mv字幕免费观看 | 婷婷视频在线 | 黄色软件在线观看视频 | 欧美一区二区三区在线看 | 久久国产成人午夜av影院潦草 | 午夜国产在线观看 | 国产免费大片 | 四虎免费av | 婷婷久久五月天 | 四虎影院在线观看av | 午夜精品久久久久久 | 免费色视频网站 | 午夜精品久久久久久久99热影院 | 国产成人av电影 | 91大神精品视频在线观看 | 国产精品久久久久久久久久东京 | 午夜久久久精品 | 久久av网 | 国产精品视频专区 | 一区二区三区四区五区六区 | 精品999在线 | 欧美日韩国产一区二区在线观看 | 亚洲人av免费网站 | 丁香六月婷婷开心婷婷网 | 国产免费叼嘿网站免费 | 亚洲国产成人在线播放 | 免费色黄 | 天天干天天天天 | 国产日韩欧美自拍 | 毛片网免费 | 天天操综 | 91精品成人 | 国产精品一区二区av日韩在线 | 久久国产手机看片 | 免费观看www7722午夜电影 | 国产成人一二三 | 亚洲精品久久久蜜臀下载官网 | www天天干com| 在线观看aa | 成人免费视频网站 | 国产在线欧美在线 | 亚洲视频久久久 | 国产xx视频| 国产精品自在线 | 成人午夜毛片 | 开心色激情网 | 日韩视频1区| 精品久久一区二区 | 在线中文字幕一区二区 | 日韩区在线观看 | 欧美日韩国产一区二区三区 | 亚洲国产精品久久久久婷婷884 | a级国产乱理论片在线观看 伊人宗合网 | 美女啪啪图片 | 久久精品99国产国产精 | 成人av在线观 | 国产精品999久久久 久产久精国产品 | 成人v| 国产精品一区二区电影 | 97国产情侣爱久久免费观看 | 91视频com | 日韩欧美在线一区 | 五月婷婷一级片 | 国产98色在线 | 日韩 | 久草在线视频新 | 最新国产视频 | 深夜免费福利在线 | 丁香六月在线观看 | 欧美一区二区精品在线 | 在线观看一区 | 麻豆手机在线 | 中文字幕亚洲精品日韩 | 激情五月视频 | 国语自产偷拍精品视频偷 | 久久福利影视 | 亚洲国产成人精品在线观看 | 一区二区三区四区五区在线 | 久久激情影院 | 亚洲一区天堂 | 日韩久久久久 | 色综合中文综合网 | 中文字幕在线观看播放 | 91av欧美| 国产探花在线看 | 99精品国产高清在线观看 | 精品一二 | 91av在线视频免费观看 | 成人91免费视频 | 中文av网站 | 久久激情片 | 亚洲一区天堂 | 精品欧美在线视频 | 主播av在线 | 亚洲91中文字幕无线码三区 | 激情五月开心 | 最新色站| 人人草人人草 | 亚洲色影爱久久精品 | 国产高清绿奴videos | www.国产在线 | 日本三级香港三级人妇99 | 综合亚洲视频 | 久久免费在线视频 | 免费福利在线 | 国内丰满少妇猛烈精品播放 | 成人h在线播放 | 欧美一级乱黄 | 在线欧美中文字幕 | 黄色av免费电影 | 丁香婷婷激情啪啪 | 日韩在线资源 | 中文字幕黄色网 | 97天天综合网| 99免费看片 | 精品国模一区二区 | 天天干天天拍天天操 | 亚洲国产精品999 | 黄色毛片视频免费观看中文 | 国产一区二区午夜 | 国产性天天综合网 | 91麻豆精品 | 91影视成人| 91在线免费播放视频 | 亚洲精区二区三区四区麻豆 | 91.精品高清在线观看 | 国产精品va最新国产精品视频 | 国产理论影院 | 婷婷成人亚洲综合国产xv88 | 99婷婷狠狠成为人免费视频 | 成人在线视频一区 | 久久艹在线观看 | 五月婷婷视频在线 | 最近免费中文字幕大全高清10 | 黄色成人av在线 | 日韩a级黄色| 99精品久久久久久久 | 国产区高清在线 | 国产亚洲精品美女 | 色综合久久久久综合99 | 日韩特黄一级欧美毛片特黄 | 丝袜一区在线 | 亚洲欧美在线观看视频 | 国产一级在线看 | 婷婷综合导航 | 天天操天天干天天玩 | 99九九热只有国产精品 | 午夜视频免费播放 | 天堂成人在线 | 成人午夜电影在线播放 | 色99久久| 美女视频是黄的免费观看 | 国产精品久久久区三区天天噜 | av字幕在线 | 久久久精品网站 | 久久手机精品视频 | 婷婷天天色 | 成人av在线看 | 亚洲国产成人精品久久 | 日本最新中文字幕 | 亚洲日韩中文字幕在线播放 | 91av免费看 | 欧美精品v国产精品v日韩精品 | www日韩视频| 在线视频18在线视频4k | 国产精品自产拍在线观看蜜 | 午夜av一区二区三区 | 久久国产精品成人免费浪潮 | 亚洲性视频 | 国产精品剧情 | 欧美一区二区视频97 | 首页中文字幕 | 人人cao| 国产精品涩涩屋www在线观看 | 一二区精品 | 欧美视屏一区二区 | 夜夜夜| 国产毛片久久久 | 韩国精品一区二区三区六区色诱 | 精品人人爽 | 91激情在线视频 | 天天射天天干天天 | 人人艹人人 | 成年人免费av | 可以免费观看的av片 | 最近中文字幕免费视频 | 日韩av一区二区在线播放 | 国产精品片 | 欧美精品久久久久久久 | www.xxx.性狂虐| 国产成人一区二区三区久久精品 | 色偷偷网站视频 | 97在线观| 最近日本mv字幕免费观看 | 色综合天天综合 | 中文在线a天堂 | 91av免费观看 | 免费久久99精品国产 | 操操操日日 | 国产精品video | 日日躁夜夜躁xxxxaaaa | 日韩综合精品 | 91成版人在线观看入口 | 欧美日韩激情网 | 天天色天天骑天天射 | 狠狠色丁香久久婷婷综合丁香 | 国产一级不卡毛片 | 最近2019年日本中文免费字幕 | 一二三久久久 | 日韩av在线资源 | 蜜臀av性久久久久av蜜臀妖精 | 青青久草在线视频 | 欧美精品v国产精品v日韩精品 | 精品一区三区 | 国产精品 亚洲精品 | 五月激情五月激情 | 婷婷新五月| 人人爱人人舔 | 日韩免费精品 | 麻豆91精品视频 | 免费视频 你懂的 | 丁香六月天 | av线上免费观看 | 日批视频 | 日本久久91 | 麻豆传媒视频在线免费观看 | 色.com| 久久久久国产精品午夜一区 | 日韩在线视频播放 | 婷婷激情五月综合 | av色图天堂网 | 玖玖精品在线 | 特级西西444www大胆高清无视频 | 欧美少妇影院 | 四虎在线观看网址 | av在线电影播放 | 91免费高清 | 久久久久一区二区三区四区 | 手机在线中文字幕 | 国产91精品看黄网站在线观看动漫 | 国产精品免费人成网站 | 在线播放日韩av | 成人精品视频 | 99精品在线观看视频 | 干天天 | 性日韩欧美在线视频 | 国产成人av电影 | 午夜精品一区二区国产 | 国产视频18 | 国产色女人| 黄色av电影免费观看 | 久久久夜色 | 欧美精品一区二区免费 | 美女免费视频一区二区 | 天天综合久久综合 | 亚洲国产精品va在线看黑人动漫 | 2018亚洲男人天堂 | 久久黄色精品视频 | 在线免费观看黄色av | 国产精品成久久久久三级 | 久久视频国产精品免费视频在线 | 夜夜澡人模人人添人人看 | 2019天天干天天色 | 国产成人av| 国产精品99页| 蜜桃视频在线观看一区 | 人人射人人插 | 精品一区二区三区久久久 | 午夜免费久久看 | 91视频91色| 精品国产乱码久久久久久1区二区 | 91中文字幕网 | 日韩三级视频 | 国产专区第一页 | 亚洲精品欧美成人 | 久久免费成人网 | 五月天激情视频在线观看 | 在线观看涩涩 | 久久综合之合合综合久久 | 韩国精品一区二区三区六区色诱 | 久久三级毛片 | 亚洲欧美日韩一区二区三区在线观看 | avove黑丝 | japanese黑人亚洲人4k | 日韩专区中文字幕 | 久久久久久久久综合 | 99免费看片 | 操操操夜夜操 | 国产欧美精品在线观看 | 99国产在线观看 | 激情欧美一区二区免费视频 | 黄色免费大片 | 国产免费专区 | 久久国产一二区 | av中文字幕在线观看网站 | 少妇自拍av | 97精品国产91久久久久久 | 婷婷六月丁 | 日韩精品一区二区在线观看视频 | www.黄色网.com| 久久开心激情 | 日韩黄色软件 | 91视频免费看 | 中日韩免费视频 | av黄色大片 | 日本三级全黄少妇三2023 | 亚洲国产精品第一区二区 | 婷婷5月激情5月 | 亚洲精品免费在线观看视频 | 国产小视频在线 | 国产成人99久久亚洲综合精品 | 一区 二区 精品 | 免费看三片 | 亚洲国产丝袜在线观看 | 日韩视频在线不卡 | 最近中文字幕mv免费高清在线 | 日韩专区中文字幕 | 久久激情网站 | 色综合久久久久综合 | 亚洲精品午夜久久久 | 中文日韩在线视频 | 美女久久久久久久久久 | 久久免费观看少妇a级毛片 久久久久成人免费 | 久久全国免费视频 | 色妞久久福利网 | 天天干天天操 | 国产91aaa | 91在线网址| 69热国产视频 | 91人人人 | 国产成人三级在线 | 亚洲视频在线播放 | 久久国产精品影视 | 91精品国产网站 | 国产成人777777 | 久久亚洲二区 | 日韩com| 揉bbb玩bbb少妇bbb | 欧美不卡在线 | 狠狠色狠狠色综合日日92 | 免费一级特黄毛大片 | 国产精品久久久久久久久久久杏吧 | 欧美二区三区91 | 9ⅰ精品久久久久久久久中文字幕 | 99 精品 在线| 欧美在线视频一区二区三区 | 在线国产片 | 国产精品免费不卡 | 日韩激情av在线 | 国产精品毛片一区视频播 | 欧美最新大片在线看 | 色综合婷婷久久 | 亚洲国产视频直播 | 久久精品影视 | 精品在线不卡 | 蜜臀91丨九色丨蝌蚪老版 | 色在线国产 | 欧美另类一二三四区 | 五月天激情在线 | 五月亚洲婷婷 | 久草电影免费在线观看 | 毛片网站在线观看 | 中文字幕一区二区三区乱码不卡 | 日日摸日日爽 | 精品欧美一区二区三区久久久 | 免费在线黄色av | 久久av中文字幕片 | 精品久久久久久亚洲综合网站 | 亚洲精品色视频 | 国产精品久久一区二区三区, | 在线观av | 天堂av在线7| 亚洲成av人电影 | 日操干 | 天天艹天天干天天 | 狠狠久久伊人 | 国产日韩精品一区二区三区 | av黄色一级片 | 国产精品99久久久精品 | 久久影院精品 | 色999精品| 国产午夜一级毛片 | 欧美婷婷色 | 亚洲更新最快 | 美女视频免费一区二区 | 国产1区在线| 欧美精品九九 | 久久精品一| 国产精品成人久久 | 国产一区在线免费观看视频 | 天天综合导航 | 欧美在线视频精品 | 亚洲人在线7777777精品 | 久久久免费高清视频 | 麻豆传媒视频在线免费观看 | 欧美日韩免费观看一区二区三区 | 日韩欧美在线观看一区二区三区 | 美女性爽视频国产免费app | 色婷婷国产 | 欧美电影在线观看 | 中文字幕视频三区 | 夜夜看av| 婷婷在线免费视频 | 四虎永久免费网站 | wwwav视频| 国产成人精品在线观看 | 中文成人字幕 | 日韩欧美第二页 | av在线官网 | 久久国产美女 | 亚洲午夜av | 亚洲高清视频在线观看免费 | 久精品视频免费观看2 | 天天干天天摸 | 国产中文字幕在线视频 | 久久久久久高潮国产精品视 | 色妞色视频一区二区三区四区 | 色在线免费 | 国产中文字幕亚洲 | 国产高清福利在线 | 成年美女黄网站色大片免费看 | 免费在线观看的av网站 | 91麻豆精品国产91久久久更新时间 | 国产资源站 | 99热精品国产一区二区在线观看 | 99操视频| 久久久精品午夜 | 久久婷婷色综合 | 亚洲国产日韩一区 | 91久久精品一区二区三区 | 久久精品91久久久久久再现 | 精品久久久久久久久久 | 国产精品久久久久一区二区三区 | 麻豆视频免费版 | 成人黄色电影在线观看 | 久久综合久色欧美综合狠狠 | 热re99久久精品国产99热 | 在线视频精品播放 | 国产精品无 | 日日精品 | 中文久久精品 | 69av国产 | 九七在线视频 | 黄网站大全 | 91精品国产91p65 | 久久蜜臀av | 天天操天天射天天操 | 在线观看完整版免费 | 久久成人国产精品一区二区 | 在线免费黄色 | 国产高清黄色 | 五月婷婷在线播放 | 久久少妇av| 亚洲资源一区 | 热久在线 | 婷婷新五月 | 国产在线视频在线观看 | 成人毛片在线观看视频 | 六月色丁香 | 久久曰视频| 亚洲精品视频网站在线观看 | 精品久久久久一区二区国产 | 91亚洲欧美激情 | 日日操操| 亚洲涩涩色 | 欧美日韩大片在线观看 | 欧美日韩伦理在线 | 久久久久久久久久久久久久电影 | 色网站免费在线看 | 久久久精品网 | 久久综合给合久久狠狠色 | 久久久午夜精品福利内容 | 69视频网站 | 国产男男gay做爰 | 看毛片的网址 | 亚洲精品中文在线资源 | 一本一本久久aa综合精品 | 国精产品999国精产品视频 | 国产精品第10页 | 91视频在线自拍 | 国产精品99久久久久 | 五月天综合在线 | 日本精品va在线观看 | 国产自产在线视频 | 五月开心婷婷 | 91在线精品播放 | 亚洲国产精品电影在线观看 | 成人三级视频 | 国产中文字幕免费 |