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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

FreeMarker语法指南

發布時間:2024/9/27 编程问答 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FreeMarker语法指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

FreeMarker概述

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

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

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

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

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

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

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

?

?

1、通用目標

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

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

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

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

?

2、強大的模板語言

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

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

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

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

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

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

?

3、通用數據模型

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

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

?

4、為Web準備

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

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

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

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

?

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

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

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

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

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

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

?

6、強大的XML處理能力

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

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

?

?

FreeMarker設計指南(1)


?

?

?

?

1、快速入門

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

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

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

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

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

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

<html> <head> ? <title>Welcome!</title> </head> <body> ? <h1>Welcome ${user}!</h1> ? <p>Our latest product: ? <a href="${latestProduct.url}">${latestProduct.name}</a>! </body> </html>?

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

l???????? 至于user、latestProduct.urllatestProduct.name來自于數據模型(data model

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

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

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

(root) ? | ? +- user = "Big Joe" ? | ? +- latestProduct ????? | ????? +- url = "products/greenmouse.html" ????? | ????? +- name = "green mouse"

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

l???????? 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)數據模型

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

(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"

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

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

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

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

l???????? 另外一種變量是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"

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

3)模板

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

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

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

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

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

????????? 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)整體結構

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<ul> <#list animals as being> ? <li>${being.name} for ${being.price} Euros ? <#if use = "Big Joe"> ???? (except for you) </#list> </#if><#-- WRONG! --> </ul>?

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

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

<#list[BR] ??animals???????as[BR] ?????being[BR] >[BR] ${being.name}?for?${being.price}?Euros[BR] </#list????>?

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

(3)表達式

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

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

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

416進制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???????? 鍵和值都是表達式,但是鍵必須是字符串

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

????????? 頂層變量: ${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語法訪問

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

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

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

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

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

輸出結果是:

- Joe - Fred - Julia - Kate

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

????????? 連接操作:和字符串一樣,使用+,如果具有相同的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?

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

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

${x * x - 100} ${x / 2} ${12 % 10}

輸出結果是(假設x5):

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

輸出結果是(假設x5):

2 1 1 -1 -1

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

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

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

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

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

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

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

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

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

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

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

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

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?

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

操作符組

操作符

后綴

[subvarName] [subStringRange] . (methodParams)

一元

+expr、-expr、!

內建

?

乘法

*、 / 、%

加法

+、-

關系

<、>、<=、>=(lt、lte、gt、gte)

相等

==(=)、!=

邏輯and

&&

邏輯or

||

數字范圍

..

4Interpolation

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

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

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

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

l???????? 通用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

l???????? 數字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)用戶定義指令

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

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

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

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

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

<@greet></@greet>

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

<@greet/>

l???????? 參數

????????? 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"/>就正確了

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

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

????????? 用戶定義指令可以有嵌套內容,使用<#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: ? ? ?

????????? ?

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

????????? 用戶定義指令可以有循環變量,通常用于重復嵌套內容,基本用法是:作為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)在模板中定義變量

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

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

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

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

l???????? 局部變量隱藏(而不是覆蓋)同名的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 ?

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

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

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

<#assign user = "Joe Hider"> ${user}????????? <#-- prints: Joe Hider --> ${.globals.user} <#-- prints: Big Joe -->?

3)名字空間

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

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

l???????? 創建庫

????????? 下面是一個創建庫的例子(假設保存在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?

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

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

<#import "/lib/my_test.ftl" as my> ${my.mail} <#assign mail="jsmith@other.com" in my> ${my.mail}?

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

jsmith@acme.com jsmith@other.com?

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

<#macro copyright date> ? <p>Copyright (C) ${date} ${user}. All rights reserved.</p> </#macro> <#assign mail = "${user}@acme.com"> ?

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

<#import "/lib/my_test.ftl" as my> <@my.copyright date="1999-2002"/> ${my.mail} ?

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

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

?

Freemarker - 幾個比較實用的例子 - -

??????????????????????????????????????用Freemarker做模本語言有一段時間了,列出幾個和JSP或者Velocity相比起來比較方便的用途,目的是引誘更多的人跳上Freemarker這個賊船,

1. String內置的JavaScript轉換: js_string
用途:用于JavaScript轉義,轉換',",換行等特殊字符
模板:

<script>
alert("${errorMessage?js_string}");
</script>


輸出:

<script>
alert("Readonly\'s pet name is \"Cross Bone\"");
</script>


2.內置的默認值處理:default
用途: 用于處理默認值
模本:

User: ${userLogin.name?default("Anonymous")}

<td>${(employee.department.manager.name)?default("?")}</td>


輸出:

User: Anonymous
<td>?</td>


注,可以對整個對象樹加上(),再用內置處理器這種方便的做法,偶也是最近剛學會的,以前一直用很傻的方法做.....

3. Sequence內置的計數器: xxx_index
用途:顯示序號
模板:

<#list employees as e>
${e_index}. ${e.name}
</#list>


輸出:

1. Readonly
2. Robbin


4. Sequence內置的分段器: chunk
用途:某些比較BT的排版需求
模板:

<#assign seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']>
<#list seq?chunk(4) as row>
<ul>
<li><#list row as cell>${cell} </#list></li>
</ul>
</#list>

<#list seq?chunk(4, '-') as row>
<tr>
<td><#list row as cell>${cell} </#list></td>
</tr>
</#list>


輸出:

<ul>
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
</ul>
<ul>
<li>e</li>
<li>f</li>
<li>g</li>
<li>h</li>
</ul>
<ul>
<li>i</li>
<li>j</li>
</ul>

<tr>
<td>a</td>
<td>b</td>
<td>c</td>
<td>d</td>
</tr>
<tr>
<td>e</td>
<td>f</td>
<td>g</td>
<td>h</td>
</tr>
<tr>
<td>i</td>
<td>j</td>
<td>-</td>
<td>-</td>
</tr>

?

?

總結

以上是生活随笔為你收集整理的FreeMarker语法指南的全部內容,希望文章能夠幫你解決所遇到的問題。

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

久久视频99 | 久久国产精品免费一区 | 欧洲精品久久久久毛片完整版 | 日韩在线观看视频中文字幕 | 国产欧美精品一区二区三区四区 | 亚洲精品乱码久久久久久高潮 | 天天操夜操 | 久久国产精品久久久 | 日韩欧美精选 | 欧美视频www | 视色网站 | 天天爱天天插 | 国产在线久草 | 91爱爱免费观看 | 手机看片中文字幕 | 日日综合网 | 亚洲最新av网站 | 天天综合日日夜夜 | 欧美日韩一区二区视频在线观看 | 日韩免费一区二区三区 | 久久精品久久精品久久精品 | 久久国产区 | 久久综合久久久 | av官网| 精品国产一区二区三区久久影院 | 国产精品18久久久久白浆 | 国产精品嫩草在线 | 探花视频免费在线观看 | 亚洲 欧美 变态 国产 另类 | av 一区二区三区四区 | 久久久精品国产一区二区 | 婷婷六月丁香激情 | 欧美激情精品久久久 | 中文字幕日韩无 | 亚洲精品免费在线观看 | 国产精品 久久 | 久久精品男人的天堂 | 欧美黑吊大战白妞欧美 | 天天插伊人 | 丁香激情视频 | 成人av在线网址 | 免费 在线 中文 日本 | 91色蜜桃| 久操97| 狠狠躁夜夜躁人人爽超碰97香蕉 | 久久影视网 | 成人中文字幕av | 亚洲精品国产品国语在线 | 69国产盗摄一区二区三区五区 | 在线观看国产一区二区 | 99夜色| 亚洲97在线 | 99热在线免费观看 | 亚洲成人欧美 | 午夜美女视频 | 香蕉视频在线免费 | www.五月天婷婷.com | 2017狠狠干 | 激情婷婷在线观看 | 九九九视频精品 | 91视频下载 | 狠狠88综合久久久久综合网 | 国产精品久久久一区二区三区网站 | 国产精品久久久久婷婷 | 极品美女被弄高潮视频网站 | 亚洲国产精品日韩 | 91.精品高清在线观看 | 免费看搞黄视频网站 | 人人爽影院| 蜜臀av性久久久久蜜臀aⅴ四虎 | 亚洲午夜精 | 国产日韩欧美在线影视 | 日韩久久精品一区二区 | 国产97色 | 国产 色| 欧美91成人网 | av在线最新| 国产人成一区二区三区影院 | 激情视频一区二区 | 麻豆视频一区二区 | 97国产超碰在线 | 欧美一区免费在线观看 | 午夜久久久久 | 国产精品96久久久久久吹潮 | 麻豆视频在线看 | 日韩免费视频一区二区 | 深爱五月激情网 | 日韩一区二区三区在线观看 | 亚洲日本中文字幕在线观看 | 日韩av电影网站在线观看 | 日韩精品影视 | 亚洲最新av网站 | 久久av福利 | 成人精品久久久 | 很污的网站 | 在线导航av | 日本三级在线观看中文字 | 福利一区在线 | 久草精品免费 | 91视频在线自拍 | 国产中文字幕三区 | 在线v片免费观看视频 | 久久99久久99精品中文字幕 | 日日夜夜精品网站 | 欧美日韩视频在线一区 | 亚洲人成人天堂h久久 | 黄色毛片在线观看 | 久久久国产精品电影 | 久久久久成人精品免费播放动漫 | 99热在线观看免费 | 午夜久久久久久久久久影院 | 日本中文乱码卡一卡二新区 | 久久精品黄 | 国产精品每日更新 | 精品国产aⅴ一区二区三区 在线直播av | 精品视频在线看 | 日韩a在线| 久久久精品网 | 久久免费公开视频 | 国产一区免费在线观看 | 亚洲精品成人网 | 国产日韩在线视频 | av电影中文| 国产又粗又猛又爽又黄的视频免费 | 婷婷亚洲综合 | 成人黄色av网站 | 美女网站视频免费都是黄 | 91欧美国产 | 国产黄在线播放 | 正在播放国产精品 | 偷拍福利视频一区二区三区 | 黄色一级大片在线免费看国产一 | 精品美女久久久久久免费 | 国产人成在线视频 | 亚洲成人精品国产 | 最近中文字幕视频完整版 | 天堂v中文 | 日韩一区二区三区高清在线观看 | 国产午夜精品久久久久久久久久 | 国产精品久久久久久麻豆一区 | 国产精品入口麻豆 | 丁香资源影视免费观看 | 日韩一区正在播放 | avwww在线| 黄色a在线观看 | 精品欧美一区二区在线观看 | 精品99免费视频 | 97超碰人人网 | 日韩视频www | 精品视频区 | 天天操夜操视频 | 欧美有色 | 韩国av免费在线观看 | 亚洲精品在线一区二区三区 | 91精品久久久久久 | 超碰97在线人人 | 国产精选在线观看 | av在线一 | 肉色欧美久久久久久久免费看 | 人人玩人人爽 | 日韩二区三区在线观看 | 综合色在线观看 | 精品视频国产 | 成人影片在线免费观看 | 一级黄色片在线免费观看 | 欧美激情综合网 | 麻豆系列在线观看 | 欧美99精品 | 黄色三级免费 | 婷婷日日 | 亚洲精品伦理在线 | 久久五月情影视 | 97国产情侣爱久久免费观看 | 国产精品精品国产色婷婷 | 色激情五月 | 国产精品久久久久久久av电影 | 天天综合网入口 | 美女在线观看av | 国产成人在线免费观看 | 欧洲一区二区在线观看 | 亚洲国产网址 | 久久99这里只有精品 | 在线观看午夜 | 91精品视频在线免费观看 | 韩国av电影在线观看 | 91在线精品视频 | 国产成人久久77777精品 | 深爱婷婷| 成人午夜电影免费在线观看 | 久久99精品国产99久久6尤 | 婷婷久久精品 | www.99在线观看 | 97狠狠操 | 在线国产中文 | 91丨九色丨首页 | 伊人夜夜 | 黄色网址国产 | 久久久视频在线 | 在线观看免费一级片 | av电影一区二区 | 日韩欧美精品一区二区 | 正在播放国产精品 | 国产一级免费视频 | 日韩av电影一区 | 久久热亚洲 | av动图| 亚洲国产片 | 人人射人人爽 | 免费观看91 | 天天干天天操天天操 | 亚洲国产成人在线 | 激情综合亚洲 | 99re热精品视频 | 久久99久久99精品 | 欧美 日韩 国产 成人 在线 | 日韩 | 美女黄频网站 | av免费在线看网站 | 999久久久久久久久久久 | 密桃av在线 | 日本中文字幕系列 | 日韩一区二区三免费高清在线观看 | 在线免费观看视频一区二区三区 | 国产中文字幕在线免费观看 | 国产精品美| 黄色毛片一级片 | 日韩精品一区二区三区中文字幕 | 制服丝袜亚洲 | 色片网站在线观看 | 亚洲美女免费视频 | 97精品国自产拍在线观看 | 婷婷激情五月综合 | 国产精品永久免费视频 | 在线播放 一区 | 91理论片午午伦夜理片久久 | 制服丝袜欧美 | 麻豆国产精品视频 | 日本xxxx裸体xxxx17 | 欧美一区中文字幕 | 国产又粗又猛又爽又黄的视频免费 | 亚洲国产黄色片 | 久草在线久 | 亚洲精选视频在线 | 久久精品欧美视频 | 看片的网址 | 国产一线二线三线性视频 | 久久99免费观看 | 国产小视频91 | 超碰激情在线 | av中文字幕在线电影 | 日韩激情在线 | 天天艹天天 | 日韩欧美区 | 日韩精品极品视频 | 国产精品久久久久久久久大全 | 成人国产精品久久久春色 | 在线观看中文字幕一区 | 亚洲美女免费精品视频在线观看 | 成人av高清 | av超碰在线观看 | 国产你懂的在线 | 久久久精品 一区二区三区 国产99视频在线观看 | 成人国产精品久久久春色 | 亚洲永久国产精品 | 天天干天天干天天干 | 一区二区三区视频网站 | 国产视频在线观看一区 | www激情com | 日韩,中文字幕 | 天天草天天 | 欧美 日韩精品 | 国产视频亚洲 | 国产一区成人在线 | 五月激情婷婷丁香 | av在线在线 | 亚州欧美视频 | 91成人网页版 | 国产色久 | 亚洲激情p | 91在线看视频免费 | 国产精品精品国产色婷婷 | 免费av成人在线 | 色七七亚洲影院 | 久草精品视频在线观看 | 中文字幕在线视频网站 | 色婷婷欧美 | 亚洲人成综合 | 国产黄| 操久 | 欧美 日韩 国产 成人 在线 | 亚洲人毛片 | 久久av一区二区三区亚洲 | 日韩av不卡在线 | 国产精品一区二区 91 | 看毛片的网址 | 色97在线 | 国产亚洲成av片在线观看 | 五月天丁香 | 国产一二区视频 | 久久久久久久久久久久久久av | 天天射综合网站 | 国产成人三级一区二区在线观看一 | 日韩一二三区不卡 | 精品久久一二三区 | 美女精品 | 久久精品国产成人精品 | 午夜免费福利片 | 天天干天天玩天天操 | av天天在线观看 | 日韩在线视频观看免费 | 欧美国产日韩一区二区三区 | 在线观看 亚洲 | 亚洲人在线7777777精品 | 婷婷国产一区二区三区 | 国产精品久久久久高潮 | 成年人视频在线免费观看 | 精品国产视频在线观看 | 国产一级片免费视频 | 97超碰人人澡 | 国产精品久久网 | 久久久高清免费视频 | 久久久免费精品国产一区二区 | 久久99网站| 成人影视片 | 日韩欧美在线视频一区二区三区 | 色婷婷狠狠五月综合天色拍 | 国产日本在线 | 香蕉视频在线免费 | 在线一级片 | 成人在线视频免费 | 欧美成人在线免费观看 | 国产一区网址 | 爱爱av在线 | 国产高清免费观看 | 久久精品精品电影网 | 又色又爽的网站 | a天堂最新版中文在线地址 久久99久久精品国产 | 久久久这里有精品 | 美女国内精品自产拍在线播放 | 91精品视频一区二区三区 | 免费一级毛毛片 | 亚洲成人一区 | 国产午夜免费视频 | 中文字幕频道 | 欧美日韩一二三四区 | 五月开心综合 | av先锋影音少妇 | 国产午夜精品一区二区三区欧美 | 99久久99久久精品 | 国产爽视频| 亚洲精品综合一二三区在线观看 | 亚洲日本国产精品 | 精品专区一区二区 | 婷婷色网视频在线播放 | 天天操福利视频 | 久久成人高清 | 亚洲国产精品久久久久久 | 日本大片免费观看在线 | 激情综合狠狠 | free. 性欧美.com | 日韩精品一区二区电影 | 91在线播放国产 | 天天操天天舔天天干 | www.夜色.com | 久久99久久99免费视频 | 日本高清dvd | 日韩精品一区二区免费视频 | 国产一区二区观看 | 在线你懂的视频 | 国产成人在线一区 | 亚洲三级网| 久久久久网站 | 亚洲国产合集 | 国产视频2区 | 国产字幕在线观看 | 91视视频在线直接观看在线看网页在线看 | 色视频成人在线观看免 | 在线观看深夜福利 | 一级α片| 热久久免费视频精品 | 亚洲精品乱码 | 香蕉视频久久久 | 成人三级视频 | 国产美女永久免费 | 国产亚洲精品av | 日韩在线视频一区二区三区 | 黄色成人在线观看 | 天天干,夜夜操 | 日韩艹 | 久久九九国产精品 | 成人aaa毛片 | 97视频免费在线看 | 超级碰99| 国产精品欧美日韩在线观看 | 国产麻豆精品在线观看 | 香蕉影视| 毛片网免费 | 久久久久久久久久久网 | 人人精品久久 | 国内视频在线观看 | 日韩高清观看 | 久久久久久久18 | 久久久天堂 | 久色 网 | 亚洲 欧美变态 另类 综合 | 国产成人香蕉 | 色综合 久久精品 | 日批网站免费观看 | 欧美日韩伦理在线 | 日韩欧美国产免费播放 | 欧美激情综合色综合啪啪五月 | 插综合网| 91精品国产一区二区在线观看 | 啪啪免费观看网站 | 久久国产精品精品国产色婷婷 | 毛片99| 精品国产乱码久久久久久天美 | 99国内精品久久久久久久 | a在线免费 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 日韩视频1区 | 久久激情五月婷婷 | 久日精品 | 东方av在线免费观看 | av电影在线观看 | 亚洲精品美女在线观看播放 | 国产在线无| 天天干天天干天天干天天干天天干天天干 | 国产精品不卡在线播放 | 91在线影视 | 中文字幕第一页在线视频 | 欧美一区二视频在线免费观看 | 精品五月天| 久久久久观看 | 国产999视频 | 免费高清在线视频一区· | 免费福利在线视频 | 国内综合精品午夜久久资源 | 亚洲精品xxxx | 日韩免费观看高清 | 男女拍拍免费视频 | 国产精品免费不 | 天躁狠狠躁 | 操老逼免费视频 | 五月婷激情 | 免费看久久 | 久久久久久久久久久久影院 | 五月综合久久 | 色婷婷av在线| 久久综合久久综合九色 | 国内免费久久久久久久久久久 | 久久99国产精品免费 | 久久免费精品一区二区三区 | 成人av免费网站 | 国产精品videoxxxx | 国产在线一线 | 中文av影院| 欧美91精品久久久久国产性生爱 | 国产精品久久久久9999 | 亚洲激情综合 | 色狠狠综合天天综合综合 | 午夜视频在线观看一区 | 日韩av电影免费在线观看 | 精品久久影院 | 精品1区2区 | 欧美国产精品久久久久久免费 | 国产中文在线视频 | 6080yy精品一区二区三区 | 国产精品久久久久久久久免费看 | 精品一区二区免费 | 久久69av | 天天曰视频 | 欧美精品一区二区在线播放 | 日韩电影在线观看一区二区 | 亚洲高清视频在线 | 欧美一级性 | 中文字幕视频网 | 亚洲精品视频大全 | 欧美精品在线观看一区 | 97av在线视频免费播放 | av网站手机在线观看 | 欧美成人黄色 | 国产精品乱看 | 日本中文字幕视频 | 亚洲人成影院在线 | 国产资源站 | 成人一区二区三区在线观看 | 在线性视频日韩欧美 | 精品一区二区三区在线播放 | 日韩最新中文字幕 | 中文字幕 成人 | 最新日韩视频 | 国产精品资源网 | 亚洲乱码精品久久久久 | 欧美激情综合五月色丁香小说 | 欧美污污视频 | av品善网 | 最近中文国产在线视频 | 欧美日韩色婷婷 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 黄色小说视频在线 | 九九热在线精品视频 | 国产美女精品人人做人人爽 | 97在线免费视频 | 久久九九网站 | 久久国产免费视频 | 91九色精品| 久久免费视频播放 | 国产91电影在线观看 | 人人爽久久久噜噜噜电影 | 婷婷色在线资源 | 亚洲a色| 99久久99久国产黄毛片 | 国产一线二线三线在线观看 | 91久久久久久久一区二区 | 97在线视频免费看 | 黄色成人在线 | 在线观看日韩精品视频 | 亚洲国产三级 | 亚洲精区二区三区四区麻豆 | 久久久性 | 最新日韩视频在线观看 | ww亚洲ww亚在线观看 | 精品国产一区二区三区久久久蜜月 | 999国产精品视频 | 日日射天天射 | 国产黄网在线 | 又色又爽的网站 | 日韩一区二区三区在线看 | 五月综合激情网 | 99久久精品日本一区二区免费 | 麻豆国产精品va在线观看不卡 | 亚洲伦理电影在线 | 成人欧美一区二区三区黑人麻豆 | 在线av资源| 精品亚洲视频在线 | 精品国产欧美一区二区三区不卡 | 伊人国产在线观看 | 中文字幕在线播出 | 狠狠色丁婷婷日日 | 精品国产精品一区二区夜夜嗨 | 日韩天天操 | 中文字幕在线观看免费高清完整版 | 欧美日韩一区二区三区在线观看视频 | 国产精品久久久久久久妇 | 激情深爱.com| 久久国产热 | 最新中文字幕在线播放 | 欧美福利久久 | www.av免费| 国产在线观看不卡 | 超碰人在线 | www.888.av | 国产精品人人做人人爽人人添 | 天天综合在线观看 | 中文字幕日本在线观看 | 成人久久久久久久久久 | 久久激情视频 久久 | 天天射天天爱天天干 | 久久综合色影院 | 人人揉人人揉人人揉人人揉97 | 亚洲视频电影在线 | 精品一区 在线 | 日韩电影在线视频 | 一区二区影院 | 国产精品入口传媒 | 97电影在线看视频 | 国产一级免费av | 日韩视频免费在线 | 91看片淫黄大片在线播放 | 国产99在线免费 | 久久国产一区 | 成人电影毛片 | 久久一级电影 | 日韩精品免费在线观看 | 西西www4444大胆在线 | 最近免费观看的电影完整版 | 欧美日韩一区二区三区不卡 | 日韩最新理论电影 | 91av国产视频 | 国产精品都在这里 | 99在线视频观看 | 中文不卡视频在线 | 国产精品免费在线播放 | 天天操月月操 | 狠狠狠色 | 午夜美女av| 精品国产乱码久久久久久三级人 | 国产精品综合在线观看 | h网站免费在线观看 | 人人爱人人添 | 日韩午夜电影 | 色综合天天狠天天透天天伊人 | 中文字幕在线观看视频一区二区三区 | 在线免费黄网站 | 在线观看免费一区 | 日韩精品久久久久久久电影竹菊 | 亚洲手机天堂 | 免费看一级一片 | 久久久亚洲国产精品麻豆综合天堂 | 欧美成人播放 | 天堂网一区二区 | 在线观看黄色大片 | 少妇bbbb搡bbbb搡bbbb | 激情五月六月婷婷 | 精品主播网红福利资源观看 | 91网址在线 | 天天草天天草 | 粉嫩av一区二区三区四区五区 | 四虎影视国产精品免费久久 | 天天干夜夜爽 | 成年人网站免费观看 | 一区二区三区在线视频111 | 国产一区福利 | 日韩成人高清在线 | 久草www | 精品久久久久国产免费第一页 | 97手机电影网 | 亚洲成人av一区二区 | 九九久久在线看 | 在线看黄色av | 精品国产免费观看 | 成人av网站在线 | 欧美一级日韩免费不卡 | 久久久久久久久久久黄色 | 99精品一区二区三区 | 成人免费观看在线视频 | 91九色蝌蚪视频 | 国产免费亚洲 | 欧美精彩视频在线观看 | 夜色成人av | 亚洲精品视频网站在线观看 | 日韩在线视频免费观看 | 狠狠色噜噜狠狠狠 | 69精品在线| 99精品视频免费看 | 人人爽夜夜爽 | 久久天天躁夜夜躁狠狠躁2022 | 人人爱夜夜操 | 免费看成年人 | www.国产在线| 亚洲国产福利视频 | 婷婷丁香九月 | 国产手机在线观看 | 久久99国产精品久久99 | 国产精品日韩欧美一区二区 | 精品久久九九 | 国产一级片免费视频 | 久久一二三四 | 99热999| 999超碰| 99久久精品国产亚洲 | av一区二区在线观看中文字幕 | 国产视频久久 | 国产精品久久久久永久免费观看 | 久久精品中文字幕少妇 | 热久久视久久精品18亚洲精品 | 精品国产自在精品国产精野外直播 | 人人讲下载 | 四虎5151久久欧美毛片 | 干天天 | 久久亚洲视频 | 久久婷婷国产色一区二区三区 | 中文永久免费观看 | 国产亚洲精品久久久久久无几年桃 | 911精品美国片911久久久 | 日韩电影精品 | 天天操天天摸天天干 | 2018亚洲男人天堂 | 免费高清在线一区 | 超碰在线资源 | www激情网| 在线观看国产www | 精品一区 精品二区 | 国产福利不卡视频 | 久久婷婷一区二区三区 | 日韩在线观看一区二区三区 | 99久久久成人国产精品 | 一区二区 不卡 | 182午夜在线观看 | 久久久免费 | 中文视频在线 | 国产一区在线看 | 久久精品女人毛片国产 | 99久久精品国产一区二区三区 | 天天插天天狠 | 色姑娘综合 | 日日日操 | 国产一在线精品一区在线观看 | 久久任你操| 日韩成人邪恶影片 | 日本中文字幕电影在线免费观看 | 国产人成看黄久久久久久久久 | 国产明星视频三级a三级点| 久久精品79国产精品 | 日韩在线视频观看 | 99超碰在线观看 | 中文字幕一区二区三区在线视频 | 久久欧洲视频 | 国产少妇在线观看 | 96视频在线 | 婷婷丁香激情网 | 九九精品视频在线 | 成人黄色av免费在线观看 | 人人狠狠综合久久亚洲婷 | 在线国产欧美 | 男女激情片在线观看 | 国产成人不卡 | www.综合网.com | 成人黄色免费观看 | 丁香婷婷在线观看 | 2023国产精品自产拍在线观看 | 狠狠色噜噜狠狠 | 亚州精品在线视频 | 91精品国产三级a在线观看 | 黄色a大片| 亚州激情视频 | 日本中文字幕在线观看 | 亚洲专区 国产精品 | 日韩精品视频免费在线观看 | 444av| 日韩在线免费电影 | 激情欧美一区二区三区免费看 | 69视频在线| 在线免费黄色 | 亚洲视频 在线观看 | 亚洲欧洲精品一区二区 | 亚洲伊人色 | 国产在线欧美 | 国产中文在线视频 | 日本99久久 | 久久国产精品99久久人人澡 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 69精品 | 国产黄色大片免费看 | 在线一二三四区 | 国产中出在线观看 | 日韩在线视频看看 | 亚洲一级在线观看 | av先锋影音少妇 | av中文字幕网站 | 欧美日韩一级久久久久久免费看 | 99爱在线观看 | 国内精品中文字幕 | 黄色h在线观看 | 久久66热这里只有精品 | 少妇bbr搡bbb搡bbb | 九色视频网址 | 黄色不卡av | 国产精品中文久久久久久久 | 天天爱天天射天天干天天 | 成人亚洲欧美 | 91香蕉久久| 特级a老妇做爰全过程 | 黄色免费观看 | 国产精品久久久久久久久免费 | 99久久精品国产亚洲 | 国产 成人 久久 | 一区免费视频 | 中文字幕在线视频精品 | 99热这里只有精品在线观看 | 天天天天天天天天操 | 国产精品夜夜夜一区二区三区尤 | 91大神视频网站 | 2021国产在线视频 | 香蕉久草在线 | 爱爱一区| 免费污片 | 在线观看免费观看在线91 | 色黄久久久久久 | 奇米影视在线99精品 | 91重口视频| 亚洲午夜av| 欧美日韩高清一区二区 | 亚洲成人免费在线观看 | 精品久久久久久亚洲综合网站 | 欧美电影在线观看 | 国产你懂的在线 | 亚洲乱码在线观看 | 色综合久久中文字幕综合网 | 国产精品久久久久9999吃药 | 99一级片 | 99精品欧美一区二区三区 | 久久热首页| 国产成人一区二区在线观看 | 天天干天天爽 | 国产精品一区二区三区99 | 不卡的av电影 | 深夜视频久久 | 亚洲人在线视频 | 成人亚洲精品国产www | 国产视频色 | 在线视频一区观看 | 午夜 在线| 天堂入口网站 | 91成人免费看 | 日本xxxx裸体xxxx17 | 天天曰视频 | 国产成人一区二区三区在线观看 | 中文字幕在线视频一区 | 91爱看片 | 中文网丁香综合网 | 亚洲少妇xxxx | 精品美女在线视频 | 久久久久久久久久久久久久电影 | 日本精a在线观看 | 五月激情站 | 久久免费黄色网址 | 亚洲欧美日韩精品久久奇米一区 | 国产香蕉视频在线播放 | 人人干人人艹 | 国产精品久久在线观看 | 免费福利片2019潦草影视午夜 | 最新日本中文字幕 | 亚洲精品在线观看免费 | 91亚洲激情 | 激情电影影院 | 亚洲成a人片在线观看网站口工 | 日韩av一区二区在线 | 91 在线视频 | 日本免费久久高清视频 | 91在线视频精品 | 99视频在线免费播放 | 欧美夫妻性生活电影 | 欧美性生活大片 | 欧美影院久久 | 久久久久久久久久久久99 | 麻豆国产在线播放 | 亚洲精品tv久久久久久久久久 | 久久国产精品色av免费看 | 日本中文在线观看 | 天天夜夜操 | 99精品观看| 国产成人精品一二三区 | 日韩av电影免费观看 | 色97在线 | 激情av五月婷婷 | 91精品啪在线观看国产 | 欧美精品久久久久性色 | 欧美与欧洲交xxxx免费观看 | 青青河边草观看完整版高清 | 免费观看黄 | 精品国产伦一区二区三区 | 香蕉在线视频播放网站 | 中文国产在线观看 | 六月丁香激情综合色啪小说 | 在线日韩亚洲 | 国产亚州av | 国产精品成人一区二区三区吃奶 | 狠狠操欧美 | 91成人国产 | 国产成人亚洲精品自产在线 | 最近免费在线观看 | 99精品视频免费观看视频 | 日韩在线观看三区 | 亚洲国产精品第一区二区 | 欧美日韩xxxxx | 日韩高清片 | av一级在线 | 免费 在线 中文 日本 | 亚洲国产三级在线 | 亚洲欧美va | 婷婷99| 亚洲一级片免费观看 | 午夜久久福利影院 | 久久久香蕉视频 | 极品久久久 | 99久久婷婷 | 国产中文字幕免费 | 91麻豆精品一区二区三区 | 国产蜜臀av | 久草精品免费 | 亚洲欧美成人综合 | 国产精品国产三级国产aⅴ9色 | zzijzzij亚洲成熟少妇 | 欧美日韩精品综合 | 91精品啪在线观看国产 | 国产拍揄自揄精品视频麻豆 | 国产精品不卡一区 | 国内成人综合 | 久久草网站 | 91视频在线免费 | 亚洲精品久久久久58 | 日韩三级一区 | 日韩欧美视频免费在线观看 | 午夜久久福利影院 | 人人超碰免费 | 国产免费嫩草影院 | 91亚洲精品久久久蜜桃 | 亚洲1区在线 | 国产一区私人高清影院 | 国产青草视频在线观看 | 日韩av不卡在线播放 | 中文字幕精品视频 | 欧美日本不卡视频 | 亚洲一区免费在线 | 亚洲男男gaygayxxxgv | 九九天堂| 亚洲欧洲一级 | www.夜夜操.com | 午夜精品中文字幕 | 亚洲一二三区精品 | 夜夜看av| 日本黄网站 | 久久久久久久久久久网站 | 亚洲国产精品一区二区久久,亚洲午夜 | 一区二区三区四区免费视频 | 婷婷新五月| 亚洲成av人片在线观看香蕉 | 国产一级片免费播放 | 免费一区在线 | 521色香蕉网站在线观看 | 久久久久久久久久久久久久电影 | 91在线你懂的 | 精品国产片 | 日日骑| 99色在线视频 | 日韩在线观看一区二区 | av在线网站大全 | 国产不卡片 | 国产精品欧美久久 | 在线观看日韩中文字幕 | 天天综合成人网 | 激情综合五月天 | 国产日韩精品在线观看 | 美女视频久久久 | 日韩精品中文字幕有码 | 国产精品a级| 99久久精品免费看国产一区二区三区 | 99精品国产成人一区二区 | 日韩欧美视频免费看 | 国产精品av一区二区 | 中文字幕一区二区三区四区视频 | 黄色性av | 五月婷婷操 | 免费国产在线精品 | 美女网站视频色 | 国产美女精品久久久 | 日韩欧美精品在线 | 天天撸夜夜操 | 美女视频免费一区二区 | 日韩最新在线视频 | 高清色免费 | 久久精精品视频 | 日韩中文字幕视频在线观看 | 天天干天天拍天天操天天拍 | 亚洲欧美视频一区二区三区 | 国产精品美女久久久久久久久 | 天天干天天玩天天操 | 99精品欧美一区二区 | 97香蕉久久国产在线观看 | 天天摸天天弄 | 91av在线免费视频 | 国产精品久久久久久久电影 | 99在线精品免费视频九九视 | 免费碰碰 | 91视频免费看网站 | 国产午夜精品在线 | 丁香国产视频 | 国产97视频在线 | 99精品国产一区二区 | 天堂网一区二区 | 久久综合精品国产一区二区三区 | 久久dvd| 亚洲午夜精品电影 | www日韩视频 | 日韩免费在线观看 | 色小说av | 97视频入口免费观看 | av网站手机在线观看 | 国产伦理一区二区 | 精品毛片久久久久久 | 中文国产字幕 | www91在线观看 | 国产91影视 | 精品久久久久久电影 | 又黄又刺激视频 | 在线日韩精品视频 | 三上悠亚一区二区在线观看 | 天天操狠狠干 | 欧美日韩视频免费 | 一级片视频免费观看 | 日本精品视频网站 | 麻豆视频国产在线观看 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 亚洲国产免费看 | 99久久精品国产亚洲 | 色婷婷激情电影 | 天天做天天看 | 成年人黄色免费视频 | 国产亚洲精品久久久久久大师 | 91在线观看视频网站 | 中文字幕在线观看一区二区三区 | 欧美激情亚洲综合 | 中文字幕精品视频 | 最新免费中文字幕 | 免费观看www7722午夜电影 | 免费亚洲电影 |