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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

超全面的freemarker教程

發布時間:2024/1/23 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 超全面的freemarker教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載:http://demojava.iteye.com/blog/800204?

以下內容全部是網上收集:

FreeMarker的模板文件并不比HTML頁面復雜多少,FreeMarker模板文件主要由如下4個部分組成:
1,文本:直接輸出的部分
2,注釋:<#-- ... -->格式部分,不會輸出
3,插值:即${...}或#{...}格式的部分,將使用數據模型中的部分替代輸出
4,FTL指令:FreeMarker指定,和HTML標記類似,名字前加#予以區分,不會輸出

下面是一個FreeMarker模板的例子,包含了以上所說的4個部分
<html><br>
<head><br>
<title>Welcome!</title><br>
</head><br>
<body><br>
<#-- 注釋部分 --><br>
<#-- 下面使用插值 -->
<h1>Welcome ${user} !</h1><br>
<p>We have these animals:<br>
<u1><br>
<#-- 使用FTL指令 -->
<#list animals as being><br>
?? <li>${being.name} for ${being.price} Euros<br>
<#list><br>
<u1><br>
</body><br>
</html>

1, FTL指令規則

在FreeMarker中,使用FTL標簽來使用指令,FreeMarker有3種FTL標簽,這和HTML標簽是完全類似的.
1,開始標簽:<#directivename parameter>
2,結束標簽:</#directivename>
3,空標簽:<#directivename parameter/>

實際上,使用標簽時前面的符號#也可能變成@,如果該指令是一個用戶指令而不是系統內建指令時,應將#符號改成@符號.
使用FTL標簽時,應該有正確的嵌套,而不是交叉使用,這和XML標簽的用法完全一樣.如果全用不存在的指令,FreeMarker不會使用模板輸出,而是產生一個錯誤消息.FreeMarker會忽略FTL標簽中的空白字符.值得注意的是< , /> 和指令之間不允許有空白字符.

2, 插值規則

FreeMarker的插值有如下兩種類型:1,通用插值${expr};2,數字格式化插值:#{expr}或#{expr;format}

2.1 通用插值

對于通用插值,又可以分為以下4種情況:
1,插值結果為字符串值:直接輸出表達式結果
2,插值結果為數字值:根據默認格式(由#setting指令設置)將表達式結果轉換成文本輸出.可以使用內建的字符串函數格式化單個插值,如下面的例子:
<#settion number_format="currency"/>
<#assign answer=42/>
${answer}
${answer?string} <#-- the same as ${answer} -->
${answer?string.number}
${answer?string.currency}
${answer?string.percent}
${answer}
輸出結果是:
$42.00
$42.00
42
$42.00
4,200%
3,插值結果為日期值:根據默認格式(由#setting指令設置)將表達式結果轉換成文本輸出.可以使用內建的字符串函數格式化單個插值,如下面的例子:
${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')'")}
輸出結果是:
2008-04-08 08:08:08 Pacific Daylight Time
Tue, Apr 8, '03
Tuesday, April 08, 2003, 08:08:08 PM (PDT)
4,插值結果為布爾值:根據默認格式(由#setting指令設置)將表達式結果轉換成文本輸出.可以使用內建的字符串函數格式化單個插值,如下面的例子:
<#assign foo=true/>
${foo?string("yes", "no")}
輸出結果是:
yes

2.2 數字格式化插值

數字格式化插值可采用#{expr;format}形式來格式化數字,其中format可以是:
mX:小數部分最小X位
MX:小數部分最大X位
如下面的例子:
<#assign x=2.582/>
<#assign y=4/>
#{x; M2} <#-- 輸出2.58 -->
#{y; M2} <#-- 輸出4 -->
#{x; m2} <#-- 輸出2.6 -->
#{y; m2} <#-- 輸出4.0 -->
#{x; m1M2} <#-- 輸出2.58 -->
#{x; m1M2} <#-- 輸出4.0 -->

3, 表達式

表達式是FreeMarker模板的核心功能,表達式放置在插值語法${}之中時,表明需要輸出表達式的值;表達式語法也可與FreeMarker標簽結合,用于控制輸出.實際上FreeMarker的表達式功能非常強大,它不僅支持直接指定值,輸出變量值,也支持字符串格式化輸出和集合訪問等功能.

3.1 直接指定值

使用直接指定值語法讓FreeMarker直接輸出插值中的值,而不是輸出變量值.直接指定值可以是字符串,數值,布爾值,集合和MAP對象.

1,字符串
直接指定字符串值使用單引號或雙引號限定,如果字符串值中包含特殊字符需要轉義,看下面的例子:
${"我的文件保存在C:\\盤"}
${'我名字是\"annlee\"'}
輸出結果是:?
我的文件保存在C:\盤
我名字是"annlee"

FreeMarker支持如下轉義字符:
\";雙引號(u0022)
\';單引號(u0027)
\\;反斜杠(u005C)
\n;換行(u000A)
\r;回車(u000D)
\t;Tab(u0009)
\b;退格鍵(u0008)
\f;Form feed(u000C)
\l;<
\g;>
\a;&
\{;{
\xCode;直接通過4位的16進制數來指定Unicode碼,輸出該unicode碼對應的字符.

如果某段文本中包含大量的特殊符號,FreeMarker提供了另一種特殊格式:可以在指定字符串內容的引號前增加r標記,在r標記后的文件將會直接輸出.看如下代碼:
${r"${foo}"}
${r"C:\foo\bar"}
輸出結果是:
${foo}
C:\foo\bar

2,數值
表達式中的數值直接輸出,不需要引號.小數點使用"."分隔,不能使用分組","符號.FreeMarker目前還不支持科學計數法,所以"1E3"是錯誤的.在FreeMarker表達式中使用數值需要注意以下幾點:
1,數值不能省略小數點前面的0,所以".5"是錯誤的寫法
2,數值8 , +8 , 8.00都是相同的

3,布爾值
直接使用true和false,不使用引號.

4,集合
集合以方括號包括,各集合元素之間以英文逗號","分隔,看如下的例子:
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x>
${x}
</#list>
輸出結果是:
星期一
星期二
星期三
星期四
星期五
星期六
星期天

除此之外,集合元素也可以是表達式,例子如下:
[2 + 2, [1, 2, 3, 4], "whatnot"]

還可以使用數字范圍定義數字集合,如2..5等同于[2, 3, 4, 5],但是更有效率.注意,使用數字范圍來定義集合時無需使用方括號,數字范圍也支持反遞增的數字范圍,如5..2

5,Map對象
Map對象使用花括號包括,Map中的key-value對之間以英文冒號":"分隔,多組key-value對之間以英文逗號","分隔.下面是一個例子:
{"語文":78, "數學":80}
Map對象的key和value都是表達式,但是key必須是字符串

3.2 輸出變量值

FreeMarker的表達式輸出變量時,這些變量可以是頂層變量,也可以是Map對象中的變量,還可以是集合中的變量,并可以使用點(.)語法來訪問Java對象的屬性.下面分別討論這些情況

1,頂層變量
所謂頂層變量就是直接放在數據模型中的值,例如有如下數據模型:
Map root = new HashMap();?? //創建數據模型
root.put("name","annlee");?? //name是一個頂層變量

對于頂層變量,直接使用${variableName}來輸出變量值,變量名只能是字母,數字,下劃線,$,@和#的組合,且不能以數字開頭號.為了輸出上面的name的值,可以使用如下語法:
${name}

2,輸出集合元素
如果需要輸出集合元素,則可以根據集合元素的索引來輸出集合元素,集合元素的索引以方括號指定.假設有索引:
["星期一","星期二","星期三","星期四","星期五","星期六","星期天"].該索引名為week,如果需要輸出星期三,則可以使用如下語法:
${week[2]}?? //輸出第三個集合元素

此外,FreeMarker還支持返回集合的子集合,如果需要返回集合的子集合,則可以使用如下語法:
week[3..5]?? //返回week集合的子集合,子集合中的元素是week集合中的第4-6個元素

3,輸出Map元素
這里的Map對象可以是直接HashMap的實例,甚至包括JavaBean實例,對于JavaBean實例而言,我們一樣可以把其當成屬性為key,屬性值為value的Map實例.為了輸出Map元素的值,可以使用點語法或方括號語法.假如有下面的數據模型:
Map root = new HashMap();
Book book = new Book();
Author author = new Author();
author.setName("annlee");
author.setAddress("gz");
book.setName("struts2");
book.setAuthor(author);
root.put("info","struts");
root.put("book", book);

為了訪問數據模型中名為struts2的書的作者的名字,可以使用如下語法:
book.author.name??? //全部使用點語法
book["author"].name
book.author["name"]??? //混合使用點語法和方括號語法
book["author"]["name"]?? //全部使用方括號語法

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

3.3, 字符串操作

FreeMarker的表達式對字符串操作非常靈活,可以將字符串常量和變量連接起來,也可以返回字符串的子串等.

字符串連接有兩種語法:
1,使用${..}或#{..}在字符串常量部分插入表達式的值,從而完成字符串連接.
2,直接使用連接運算符+來連接字符串

例如有如下數據模型:
Map root = new HashMap(); root.put("user","annlee");
下面將user變量和常量連接起來:
${"hello, ${user}!"}?? //使用第一種語法來連接
${"hello, " + user + "!"} //使用+號來連接
上面的輸出字符串都是hello,annlee!,可以看出這兩種語法的效果完全一樣.

值得注意的是,${..}只能用于文本部分,不能用于表達式,下面的代碼是錯誤的:
<#if ${isBig}>Wow!</#if>
<#if "${isBig}">Wow!</#if>
應該寫成:<#if isBig>Wow!</#if>

截取子串可以根據字符串的索引來進行,截取子串時如果只指定了一個索引值,則用于取得字符串中指定索引所對應的字符;如果指定兩個索引值,則返回兩個索引中間的字符串子串.假如有如下數據模型:
Map root = new HashMap(); root.put("book","struts2,freemarker");
可以通過如下語法來截取子串:
${book[0]}${book[4]}?? //結果是su
${book[1..4]}???? //結果是tru

3.4 集合連接運算符

這里所說的集合運算符是將兩個集合連接成一個新的集合,連接集合的運算符是+,看如下的例子:
<#list ["星期一","星期二","星期三"] + ["星期四","星期五","星期六","星期天"] as x>
${x}
</#list>
輸出結果是:星期一 星期二 星期三 星期四 星期五 星期六 星期天

3.5 Map連接運算符

Map對象的連接運算符也是將兩個Map對象連接成一個新的Map對象,Map對象的連接運算符是+,如果兩個Map對象具有相同的key,則右邊的值替代左邊的值.看如下的例子:
<#assign scores = {"語文":86,"數學":78} + {"數學":87,"Java":93}>
語文成績是${scores.語文}
數學成績是${scores.數學}
Java成績是${scores.Java}
輸出結果是:
語文成績是86
數學成績是87
Java成績是93

3.6 算術運算符

FreeMarker表達式中完全支持算術運算,FreeMarker支持的算術運算符包括:+, - , * , / , % 看如下的代碼:
<#assign x=5>
${ x * x - 100 }
${ x /2 }
${ 12 %10 }
輸出結果是:
-75?? 2.5?? 2

在表達式中使用算術運算符時要注意以下幾點:
1,運算符兩邊的運算數字必須是數字
2,使用+運算符時,如果一邊是數字,一邊是字符串,就會自動將數字轉換為字符串再連接,如:${3 + "5"},結果是:35

使用內建的int函數可對數值取整,如:
<#assign x=5>
${ (x/2)?int }
${ 1.1?int }
${ 1.999?int }
${ -1.1?int }
${ -1.999?int }
結果是:2 1 1 -1 -1

3.7 比較運算符

表達式中支持的比較運算符有如下幾個:
1,=或者==:判斷兩個值是否相等.
2,!=:判斷兩個值是否不等.
3,>或者gt:判斷左邊值是否大于右邊值
4,>=或者gte:判斷左邊值是否大于等于右邊值
5,<或者lt:判斷左邊值是否小于右邊值
6,<=或者lte:判斷左邊值是否小于等于右邊值

注意:=和!=可以用于字符串,數值和日期來比較是否相等,但=和!=兩邊必須是相同類型的值,否則會產生錯誤,而且FreeMarker是精確比較,"x","x ","X"是不等的.其它的運行符可以作用于數字和日期,但不能作用于字符串,大部分的時候,使用gt等字母運算符代替>會有更好的效果,因為FreeMarker會把>解釋成FTL標簽的結束字符,當然,也可以使用括號來避免這種情況,如:<#if (x>y)>

3.8 邏輯運算符

邏輯運算符有如下幾個:
邏輯與:&&
邏輯或:||
邏輯非:!
邏輯運算符只能作用于布爾值,否則將產生錯誤

3.9 內建函數

FreeMarker還提供了一些內建函數來轉換輸出,可以在任何變量后緊跟?,?后緊跟內建函數,就可以通過內建函數來輪換輸出變量.下面是常用的內建的字符串函數:
html:對字符串進行HTML編碼
cap_first:使字符串第一個字母大寫
lower_case:將字符串轉換成小寫
upper_case:將字符串轉換成大寫
trim:去掉字符串前后的空白字符

下面是集合的常用內建函數
size:獲取序列中元素的個數

下面是數字值的常用內建函數
int:取得數字的整數部分,結果帶符號

例如:
<#assign test="Tom & Jerry">
${test?html}
${test?upper_case?html}
結果是:Tom &amp; Jerry?? TOM &amp; JERRY

3.10 空值處理運算符

FreeMarker對空值的處理非常嚴格,FreeMarker的變量必須有值,沒有被賦值的變量就會拋出異常,因為FreeMarker未賦值的變量強制出錯可以杜絕很多潛在的錯誤,如缺失潛在的變量命名,或者其他變量錯誤.這里所說的空值,實際上也包括那些并不存在的變量,對于一個Java的null值而言,我們認為這個變量是存在的,只是它的值為null,但對于FreeMarker模板而言,它無法理解null值,null值和不存在的變量完全相同.

為了處理缺失變量,FreeMarker提供了兩個運算符:
!:指定缺失變量的默認值
??:判斷某個變量是否存在

其中,!運算符的用法有如下兩種:
variable!或variable!defaultValue,第一種用法不給缺失的變量指定默認值,表明默認值是空字符串,長度為0的集合,或者長度為0的Map對象.

使用!指定默認值時,并不要求默認值的類型和變量類型相同.使用??運算符非常簡單,它總是返回一個布爾值,用法為:variable??,如果該變量存在,返回true,否則返回false

3.11 運算符的優先級

FreeMarker中的運算符優先級如下(由高到低排列):
1,一元運算符:!
2,內建函數:?
3,乘除法:*, / , %
4,加減法:- , +
5,比較:> , < , >= , <= (lt , lte , gt , gte)
6,相等:== , = , !=
7,邏輯與:&&
8,邏輯或:||
9,數字范圍:..

實際上,我們在開發過程中應該使用括號來嚴格區分,這樣的可讀性好,出錯少

4 FreeMarker的常用指令

FreeMarker的FTL指令也是模板的重要組成部分,這些指令可實現對數據模型所包含數據的撫今迭代,分支控制.除此之外,還有一些重要的功能,也是通過FTL指令來實現的.

4.1 if指令

這是一個典型的分支控制指令,該指令的作用完全類似于Java語言中的if,if指令的語法格式如下:
<#if condition>...
<#elseif condition>...
<#elseif condition>...
<#else> ...
</#if>

例子如下:
<#assign age=23>
<#if (age>60)>老年人
<#elseif (age>40)>中年人
<#elseif (age>20)>青年人
<#else> 少年人
</#if>
輸出結果是:青年人
上面的代碼中的邏輯表達式用括號括起來主要是因為里面有>符號,由于FreeMarker會將>符號當成標簽的結束字符,可能導致程序出錯,為了避免這種情況,我們應該在凡是出現這些符號的地方都使用括號.

4.2 switch , case , default , break指令

這些指令顯然是分支指令,作用類似于Java的switch語句,switch指令的語法結構如下:
<#switch value>
<#case refValue>...<#break>
<#case refValue>...<#break>
<#default>...
</#switch>

4.3 list, break指令

list指令是一個迭代輸出指令,用于迭代輸出數據模型中的集合,list指令的語法格式如下:
<#list sequence as item>
...
</#list>
上面的語法格式中,sequence就是一個集合對象,也可以是一個表達式,但該表達式將返回一個集合對象,而item是一個任意的名字,就是被迭代輸出的集合元素.此外,迭代集合對象時,還包含兩個特殊的循環變量:
item_index:當前變量的索引值
item_has_next:是否存在下一個對象
也可以使用<#break>指令跳出迭代

例子如下:
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x>
${x_index + 1}.${x}<#if x_has_next>,</if>
<#if x="星期四"><#break></#if>
</#list>

4.4 include指令

include指令的作用類似于JSP的包含指令,用于包含指定頁.include指令的語法格式如下:
<#include filename [options]>
在上面的語法格式中,兩個參數的解釋如下:
filename:該參數指定被包含的模板文件
options:該參數可以省略,指定包含時的選項,包含encoding和parse兩個選項,其中encoding指定包含頁面時所用的解碼集,而parse指定被包含文件是否作為FTL文件來解析,如果省略了parse選項值,則該選項默認是true.

4.5 import指令

該指令用于導入FreeMarker模板中的所有變量,并將該變量放置在指定的Map對象中,import指令的語法格式如下:
<#import "/lib/common.ftl" as com>
上面的代碼將導入/lib/common.ftl模板文件中的所有變量,交將這些變量放置在一個名為com的Map對象中.

4.6 noparse指令

noparse指令指定FreeMarker不處理該指定里包含的內容,該指令的語法格式如下:
<#noparse>...</#noparse>

看如下的例子:
<#noparse>
<#list books as book>
?? <tr><td>${book.name}<td>作者:${book.author}
</#list>
</#noparse>
輸出如下:
<#list books as book>
?? <tr><td>${book.name}<td>作者:${book.author}
</#list>

4.7 escape , noescape指令

escape指令導致body區的插值都會被自動加上escape表達式,但不會影響字符串內的插值,只會影響到body內出現的插值,使用escape指令的語法格式如下:
<#escape identifier as expression>...
<#noescape>...</#noescape>
</#escape>

看如下的代碼:
<#escape x as x?html>
First name:${firstName}
Last name:${lastName}
Maiden name:${maidenName}
</#escape>
上面的代碼等同于:
First name:${firstName?html}
Last name:${lastName?html}
Maiden name:${maidenName?html}

escape指令在解析模板時起作用而不是在運行時起作用,除此之外,escape指令也嵌套使用,子escape繼承父escape的規則,如下例子:
<#escape x as x?html>
Customer Name:${customerName}
Items to ship;
<#escape x as itemCodeToNameMap[x]>
?? ${itemCode1}
?? ${itemCode2}
?? ${itemCode3}
?? ${itemCode4}
</#escape>
</#escape>
上面的代碼類似于:
Customer Name:${customerName?html}
Items to ship;
${itemCodeToNameMap[itemCode1]?html}
${itemCodeToNameMap[itemCode2]?html}
${itemCodeToNameMap[itemCode3]?html}
${itemCodeToNameMap[itemCode4]?html}

對于放在escape指令中所有的插值而言,這此插值將被自動加上escape表達式,如果需要指定escape指令中某些插值無需添加escape表達式,則應該使用noescape指令,放在noescape指令中的插值將不會添加escape表達式.

4.8 assign指令

assign指令在前面已經使用了多次,它用于為該模板頁面創建或替換一個頂層變量,assign指令的用法有多種,包含創建或替換一個頂層變量,或者創建或替換多個變量等,它的最簡單的語法如下:<#assign name=value [in namespacehash]>,這個用法用于指定一個名為name的變量,該變量的值為value,此外,FreeMarker允許在使用assign指令里增加in子句,in子句用于將創建的name變量放入namespacehash命名空間中.

assign指令還有如下用法:<#assign name1=value1 name2=value2 ... nameN=valueN [in namespacehash]>,這個語法可以同時創建或替換多個頂層變量,此外,還有一種復雜的用法,如果需要創建或替換的變量值是一個復雜的表達式,則可以使用如下語法格式:<#assign name [in namespacehash]>capture this</#assign>,在這個語法中,是指將assign指令的內容賦值給name變量.如下例子:
<#assign x>
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>
${n}
</#list>
</#assign>
${x}
上面的代碼將產生如下輸出:星期一 星期二 星期三 星期四 星期五 星期六 星期天

雖然assign指定了這種復雜變量值的用法,但是我們也不要濫用這種用法,如下例子:<#assign x>Hello ${user}!</#assign>,以上代碼改為如下寫法更合適:<#assign x="Hello ${user}!">

4.9 setting指令

該指令用于設置FreeMarker的運行環境,該指令的語法格式如下:<#setting name=value>,在這個格式中,name的取值范圍包含如下幾個:
locale:該選項指定該模板所用的國家/語言選項
number_format:指定格式化輸出數字的格式
boolean_format:指定兩個布爾值的語法格式,默認值是true,false
date_format,time_format,datetime_format:指定格式化輸出日期的格式
time_zone:設置格式化輸出日期時所使用的時區

4.10 macro , nested , return指令

macro可以用于實現自定義指令,通過使用自定義指令,可以將一段模板片段定義成一個用戶指令,使用macro指令的語法格式如下:
<#macro name param1 param2 ... paramN>
...
<#nested loopvar1, loopvar2, ..., loopvarN>
...
<#return>
...
</#macro>
在上面的格式片段中,包含了如下幾個部分:
name:name屬性指定的是該自定義指令的名字,使用自定義指令時可以傳入多個參數
paramX:該屬性就是指定使用自定義指令時報參數,使用該自定義指令時,必須為這些參數傳入值
nested指令:nested標簽輸出使用自定義指令時的中間部分
nested指令中的循環變量:這此循環變量將由macro定義部分指定,傳給使用標簽的模板
return指令:該指令可用于隨時結束該自定義指令.

看如下的例子:
<#macro book>?? //定義一個自定義指令
j2ee
</#macro>
<@book />??? //使用剛才定義的指令
上面的代碼輸出結果為:j2ee

在上面的代碼中,可能很難看出自定義標簽的用處,因為我們定義的book指令所包含的內容非常簡單,實際上,自定義標簽可包含非常多的內容,從而可以實現更好的代碼復用.此外,還可以在定義自定義指令時,為自定義指令指定參數,看如下代碼:
<#macro book booklist>???? //定義一個自定義指令booklist是參數
<#list booklist as book>
?? ${book}
</#list>
</#macro>
<@book booklist=["spring","j2ee"] />?? //使用剛剛定義的指令
上面的代碼為book指令傳入了一個參數值,上面的代碼的輸出結果為:spring j2ee

不僅如此,還可以在自定義指令時使用nested指令來輸出自定義指令的中間部分,看如下例子:
<#macro page title>
<html>
<head>
?? <title>FreeMarker示例頁面 - ${title?html}</title>
</head>
<body>
?? <h1>${title?html}</h1>
?? <#nested>????? //用于引入用戶自定義指令的標簽體
</body>
</html>
</#macro>
上面的代碼將一個HTML頁面模板定義成一個page指令,則可以在其他頁面中如此page指令:
<#import "/common.ftl" as com>???? //假設上面的模板頁面名為common.ftl,導入頁面
<@com.page title="book list">
<u1>
<li>spring</li>
<li>j2ee</li>
</ul>
</@com.page?>

從上面的例子可以看出,使用macro和nested指令可以非常容易地實現頁面裝飾效果,此外,還可以在使用nested指令時,指定一個或多個循環變量,看如下代碼:
<#macro book>
<#nested 1>????? //使用book指令時指定了一個循環變量值
<#nested 2>
</#macro>
<@book ;x> ${x} .圖書</@book?>
當使用nested指令傳入變量值時,在使用該自定義指令時,就需要使用一個占位符(如book指令后的;x).上面的代碼輸出文本如下:
1 .圖書??? 2 .圖書

在nested指令中使用循環變量時,可以使用多個循環變量,看如下代碼:
<#macro repeat count>
<#list 1..count as x>???? //使用nested指令時指定了三個循環變量
?? <#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;

return指令用于結束macro指令,一旦在macro指令中執行了return指令,則FreeMarker不會繼續處理macro指令里的內容,看如下代碼:
<#macro book>
spring
<#return>
j2ee
</#macro>
<@book />
上面的代碼輸出:spring,而j2ee位于return指令之后,不會輸出.

if, else, elseif?
switch, case, default, break
list, break?
include?
Import?
compress?
escape, noescape?
assign?
global?
setting?
macro, nested, return
t, lt, rt?
3一些常用方法或注意事項?
表達式轉換類?
數字循環?
對浮點取整數?
給變量默認值?
判斷對象是不是null?
常用格式化日期?
添加全局共享變量數據模型?
直接調用java對象的方法?
字符串處理(內置方法)?
在模板里對sequences和hashes初始化?
注釋標志?
sequences內置方法?
hashes內置方法?
4 freemarker在web開發中注意事項?
web中常用的幾個對象?
view中值的搜索順序?
在模板里ftl里使用標簽?
如何初始化共享變量?
與webwork整合配置?
5高級方法?
自定義方法?
自定義 Transforms

??????????????????????????????????
1概念
最常用的3個概念
sequence? 序列,對應java里的list、數組等非鍵值對的集合
hash????? 鍵值對的集合
namespace 對一個ftl文件的引用,利用這個名字可以訪問到該ftl文件的資源

2指令
if, else, elseif
語法
<#if condition>
? ...
<#elseif condition2>
? ...
<#elseif condition3>
? ...
...
<#else>
? ...
</#if>
用例
<#if x = 1>
? x is 1
</#if>

<#if x = 1>
? x is 1
<#else>
? x is not 1
</#if>

switch, case, default, break
語法
<#switch value>
? <#case refValue1>
??? ...
??? <#break>
? <#case refValue2>
??? ...
??? <#break>
? ...
? <#case refValueN>
??? ...
??? <#break>
? <#default>
??? ...
</#switch>

用例
字符串
<#switch being.size>
? <#case "small">
???? This will be processed if it is small
???? <#break>
? <#case "medium">
???? This will be processed if it is medium
???? <#break>
? <#case "large">
???? This will be processed if it is large
???? <#break>
? <#default>
???? This will be processed if it is neither
</#switch>
數字
<#switch x>
? <#case x = 1>
??? 1
? <#case x = 2>
??? 2
? <#default>
??? d
</#switch>

如果x=1 輸出 1 2, x=2輸出 2, x=3 輸出d

list, break
語法
<#list sequence as item>
...
<#if item = "spring"><#break></#if>
...
</#list>
關鍵字
item_index:是list當前值的下標
item_has_next:判斷list是否還有值

用例
<#assign seq = ["winter", "spring", "summer", "autumn"]>
<#list seq as x>
? ${x_index + 1}. ${x}<#if x_has_next>,</#if>
</#list>

輸出
? 1. winter,
? 2. spring,
? 3. summer,
? 4. autumn??


include
語法
<#include filename>
or
<#include filename options>
options包含兩個屬性
encoding=”GBK” 編碼格式
parse=true 是否作為ftl語法解析,默認是true,false就是以文本方式引入.注意在ftl文件里布爾值都是直接賦值的如parse=true,而不是parse=”true”
用例
/common/copyright.ftl包含內容
Copyright 2001-2002 ${me}<br>
All rights reserved.??
模板文件
<#assign me = "Juila Smith">
<h1>Some test</h1>
<p>Yeah.
<hr>
<#include "/common/copyright.ftl" encoding=”GBK”>?
輸出結果
<h1>Some test</h1>
<p>Yeah.
<hr>
Copyright 2001-2002 Juila Smith
All rights reserved.?

Import
語法
<#import path as hash>
類似于java里的import,它導入文件,然后就可以在當前文件里使用被導入文件里的宏組件

用例

假設mylib.ftl里定義了宏copyright那么我們在其他模板頁面里可以這樣使用
<#import "/libs/mylib.ftl" as my>

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

"my"在freemarker里被稱作namespace

compress
語法
<#compress>
? ...
</#compress>
用來壓縮空白空間和空白的行
用例
<#assign x = "??? moo? \n\n?? ">
(<#compress>
? 1 2? 3?? 4??? 5
? ${moo}
? test only

? I said, test only

</#compress>)??
輸出
(1 2 3 4 5
moo
test only
I said, test only)?
escape, noescape
語法
<#escape identifier as expression>
? ...
? <#noescape>...</#noescape>
? ...
</#escape>
用例
主要使用在相似的字符串變量輸出,比如某一個模塊的所有字符串輸出都必須是html安全的,這個時候就可以使用該表達式
<#escape x as x?html>
? First name: ${firstName}
? <#noescape>Last name: ${lastName}</#noescape>
? Maiden name: ${maidenName}
</#escape>
相同表達式??
? First name: ${firstName?html}
? Last name: ${lastName }
? Maiden name: ${maidenName?html}
assign
語法
<#assign name=value>
or
<#assign name1=value1 name2=value2 ... nameN=valueN>
or
<#assign same as above... in namespacehash>
or
<#assign name>
? capture this
</#assign>
or
<#assign name in namespacehash>
? capture this
</#assign>
用例
生成變量,并且給變量賦值
給seasons賦予序列值
<#assign seasons = ["winter", "spring", "summer", "autumn"]>

給變量test加1
<#assign test = test + 1>

給my namespage 賦予一個變量bgColor,下面可以通過my.bgColor來訪問這個變量
<#import "/mylib.ftl" as my>
<#assign bgColor="red" in my>

將一段輸出的文本作為變量保存在x里
下面的陰影部分輸出的文本將被賦值給x
<#assign x>
? <#list 1..3 as n>
??? ${n} <@myMacro />
? </#list>
</#assign>
Number of words: ${x?word_list?size}
${x}

<#assign x>Hello ${user}!</#assign>???? error
<#assign x=” Hello ${user}!”>???????? true

同時也支持中文賦值,如:
<#assign 語法>
? java
</#assign>
${語法}
打印輸出:
java
global
語法
<#global name=value>
or
<#global name1=value1 name2=value2 ... nameN=valueN>
or
<#global name>
? capture this
</#global>

全局賦值語法,利用這個語法給變量賦值,那么這個變量在所有的namespace中是可見的,如果這個變量被當前的assign語法覆蓋 如<#global x=2> <#assign x=1> 在當前頁面里x=2將被隱藏,或者通過${.global.x}來訪問

setting
語法
<#setting name=value>
用來設置整個系統的一個環境
locale
number_format
boolean_format
date_format, time_format, datetime_format
time_zone
classic_compatible
用例
假如當前是匈牙利的設置,然后修改成美國
${1.2}
<#setting locale="en_US">
${1.2}??
輸出
1,2
1.2
因為匈牙利是采用“,”作為十進制的分隔符,美國是用“.”

?

macro, nested, return
語法

<#macro name param1 param2 ... paramN>
? ...
? <#nested loopvar1, loopvar2, ..., loopvarN>
? ...
? <#return>
? ...
</#macro>
用例
<#macro test foo bar="Bar" baaz=-1>
? Test text, and the params: ${foo}, ${bar}, ${baaz}
</#macro>
<@test foo="a" bar="b" baaz=5*5-2/>
<@test foo="a" bar="b"/>
<@test foo="a" baaz=5*5-2/>
<@test foo="a"/>?
輸出
? Test text, and the params: a, b, 23
? Test text, and the params: a, b, -1
? Test text, and the params: a, Bar, 23
? Test text, and the params: a, Bar, -1
定義循環輸出的宏
<#macro list title items>
? <p>${title?cap_first}:
? <ul>
??? <#list items as x>
????? <li>${x?cap_first}
??? </#list>
? </ul>
</#macro>
<@list items=["mouse", "elephant", "Python"] title="Animals"/>
輸出結果??
<p>Animals:
? <ul>
????? <li>Mouse
????? <li>Elephant
????? <li>Python
? </ul>
包含body的宏
<#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!

?


t, lt, rt
語法
<#t> 去掉左右空白和回車換行

<#lt>去掉左邊空白和回車換行

<#rt>去掉右邊空白和回車換行

<#nt>取消上面的效果


3一些常用方法或注意事項


表達式轉換類
${expression}計算expression并輸出
#{ expression }數字計算#{ expression ;format}安格式輸出數字format為M和m
M表示小數點后最多的位數,m表示小數點后最少的位數如#{121.2322;m2M2}輸出121.23

?


數字循環
1..5 表示從1到5,原型number..number
對浮點取整數
${123.23?int} 輸出123
給變量默認值
${var?default(“hello world<br>”)?html}如果var is null那么將會被hello world<br>替代

判斷對象是不是null
??? <#if mouse?exists>
????? Mouse found
<#else>
也可以直接${mouse?if_exists})輸出布爾形
常用格式化日期
?openingTime必須是Date型,詳細查看freemarker文檔 Reference->build-in referece->build-in for date

${openingTime?date}
${openingTime?date_time}
${openingTime?time}

添加全局共享變量數據模型
在代碼里的實現
??? cfg = Configuration.getDefaultConfiguration();
cfg.setSharedVariable("global", "you good");?
頁面實現可以通過global指令,具體查看指令里的global部分
直接調用java對象的方法
${object.methed(args)}?

字符串處理(內置方法)
html安全輸出
“abc<table>sdfsf”?html?
返回安全的html輸出,替換掉html代碼
xml安全輸出
var?xml???
substring的用法
<#assign user=”hello jeen”>
${user[0]}${user[4]}?
${user[1..4]}
輸出 :
ho
ello??
類似String.split的用法?
?“abc;def;ghi”?split(“;”)返回sequence
將字符串按空格轉化成sequence,然后取sequence的長度
???? var?word_list? 效果同 var?split(“ ”)?
?var?word_list?size

取得字符串長度
var?length

大寫輸出字符
var?upper_case

小寫輸出字符
var?lower_case

首字符大寫
var?cap_first

首字符小寫
var?uncap_first

去掉字符串前后空格?
var?trim

每個單詞的首字符大寫
var?capitalize

類似String.indexof:?
?“babcdabcd”?index_of(“abc”) 返回1
?“babcdabcd”?index_of(“abc”,2) 返回5
類似String.lastIndexOf?
?last_index_of和String.lastIndexOf類似,同上

下面兩個可能在代碼生成的時候使用(在引號前加”\”)
j_string: 在字符串引號前加”\”
?<#assign beanName = 'The "foo" bean.'>
?String BEAN_NAME = "${beanName?j_string}";
打印輸出:
?String BEAN_NAME = "The \"foo\" bean.";
js_string:
?<#assign user = "Big Joe's \"right hand\".">
<script>
? alert("Welcome ${user}!");
</script>??
打印輸出
?alert("Welcome Big Joe\'s \"right hand\"!");

替換字符串 replace
${s?replace(‘ba’, ‘XY’ )}
${s?replace(‘ba’, ‘XY’ , ‘規則參數’)}將s里的所有的ba替換成xy 規則參數包含: i r m s c f 具體含義如下:
· i: 大小寫不區分.
· f: 只替換第一個出現被替換字符串的字符串
· r:? XY是正則表達式
· m: Multi-line mode for regular expressions. In multi-line mode the expressions ^ and $ match just after or just before, respectively, a line terminator or the end of the string. By default these expressions only match at the beginning and the end of the entire string.
· s: Enables dotall mode for regular expressions (same as Perl singe-line mode). In dotall mode, the expression . matches any character, including a line terminator. By default this expression does not match line terminators.
· c: Permits whitespace and comments in regular expressions.


在模板里對sequences和hashes初始化
sequences?

1. [“you”,”me”,”he”]?
2. 1..100
3. [ {“Akey”:”Avalue”},{“Akey1”:”Avalue1”},
{“Bkey”:”Bvalue”},{“Bkey1”:”Bvalue1”},
]


hashes????? {“you”:”a”,”me”:”b”,”he”:”c”}


注釋標志
<#--?
這里是注釋?
-->
舊版本的freemarker采用的是<#comment> 注釋 </#comment>方法

sequences內置方法
sequence?first
返回sequence的第一個值;前提條件sequence不能是null
sequence?last
?返回sequence最后一個值
sequence?reverse
?反轉sequence的值
sequence?size
?返回sequence的大小
sequence?sort
?對sequence按里面的對象toString()的結果進行排序
sequence?sort_by(value)
對sequence 按里面的對象的屬性value進行排序
如: sequence里面放入的是10 個user對象,user對象里面包含name,age等屬性
sequence?sort_by(name) 表示所有的user按user.name進行排序
hashes內置方法
hash?keys
?返回hash里的所有keys, 返回結果類型sequence
hash?values
?返回hash里的所有value, 返回結果類型sequence
4 freemarker在web開發中注意事項
freemarker與webwork整合
web中常用的幾個對象
Freemarker的ftl文件中直接使用內部對象:
${Request ["a"]}
${RequestParameters["a"]}
${Session ["a"]}
${Application ["a"]}
${JspTaglibs ["a"]}

與webwork整合之后 通過配置的servlet 已經把request,session等對象置入了數據模型中
在view中存在下面的對象
? 我們可以在ftl中${req}來打印req對象
· req - the current HttpServletRequest?
· res - the current HttpServletResponse?
· stack - the current OgnlValueStack?
· ognl - the OgnlTool instance?
· webwork - an instance of FreemarkerWebWorkUtil?
· action - the current WebWork action?
· exception - optional the Exception instance, if the view is a JSP exception or Servlet exception view?
view中值的搜索順序
${name}將會以下面的順序查找name值
· freemarker variables?
· value stack?
· request attributes?
· session attributes?
· servlet context attributes?
在模板里ftl里使用標簽
注意,如果標簽的屬性值是數字,那么必須采用nubmer=123方式給屬性賦值
JSP頁面
<%@page?contentType="text/html;charset=ISO-8859-2" language="java"%>
<%@taglib?uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@taglib?uri="/WEB-INF/struts-bean.tld" prefix="bean"%>

<html>
? <body>
??? <h1><bean:message key="welcome.title"/></h1>
??? <html:errors/>
??? <html:form action="/query">
????? Keyword: <html:text property="keyword"/><br>
????? Exclude: <html:text property="exclude"/><br>
????? <html:submit value="Send"/>
??? </html:form>
? </body>
</html>?
模板ftl頁面
<#assign html=JspTaglibs["/WEB-INF/struts-html.tld"]>
<#assign bean=JspTaglibs["/WEB-INF/struts-bean.tld"]>

<html>
? <body>
??? <h1><@bean.message key="welcome.title"/></h1>
??? <@html.errors/>
??? <@html.form action="/query">
????? Keyword: <@html.text property="keyword"/><br>
????? Exclude: <@html.text property="exclude"/><br>
????? <@html.submit value="Send"/>
??? </@html.form?>
? </body>
</html>?


如何初始化共享變量
1. 初始化全局共享數據模型
freemark在web上使用的時候對共享數據的初始化支持的不夠,不能在配置初始化的時候實現,而必須通過ftl文件來初始化全局變量。這是不能滿主需求的,我們需要在servlet init的時候留出一個接口來初始化系統的共享數據
具體到和webwork整合,因為本身webwork提供了整合servlet,如果要增加全局共享變量,可以通過修改com.opensymphony.webwork.views.freemarker.FreemarkerServlet來實現,我們可以在這個servlet初始化的時候來初始化全局共享變量
與webwork整合配置
配置web.xml
<servlet>
??? <servlet-name>freemarker</servlet-name>
??? <servlet-class>com.opensymphony.webwork.views.freemarker.FreemarkerServlet</servlet-class>
??? <init-param>
????? <param-name>TemplatePath</param-name>
<param-value>/</param-value>
<!—模板載入文件夾,這里相對context root,遞歸獲取該文件夾下的所有模板-->
??? </init-param>
??? <init-param>
????? <param-name>NoCache</param-name> <!—是否對模板緩存-->
????? <param-value>true</param-value>
??? </init-param>
??? <init-param>
????? <param-name>ContentType</param-name>
????? <param-value>text/html</param-value>
??? </init-param>
??? <init-param>
<param-name>template_update_delay</param-name>
<!—模板更新時間,0表示每次都更新,這個適合開發時候-->
????? <param-value>0</param-value>
??? </init-param>
??? <init-param>
????? <param-name>default_encoding</param-name>
????? <param-value>GBK</param-value>
??? </init-param>
??? <init-param>
????? <param-name>number_format</param-name>
????? <param-value>0.##########</param-value><!—數字顯示格式-->
??? </init-param>
??? <load-on-startup>1</load-on-startup>
? </servlet>
? <servlet-mapping>
??? <servlet-name>freemarker</servlet-name>
??? <url-pattern>*.ftl</url-pattern>
? </servlet-mapping>

5高級方法
自定義方法
${timer("yyyy-MM-dd H:mm:ss", x)}
${timer("yyyy-MM-dd ", x)}

在模板中除了可以通過對象來調用方法外(${object.methed(args)})也可以直接調用java實現的方法,java類必須實現接口TemplateMethodModel的方法exec(List args). 下面以把毫秒的時間轉換成按格式輸出的時間為例子
public class LongToDate implements TemplateMethodModel {
????
public TemplateModel exec(List args) throws TemplateModelException {
SimpleDateFormat mydate = new SimpleDateFormat((String) args.get(0)));
??????? return mydate.format(new Date(Long.parseLong((String)args.get(1)));
??? }
}??
將LongToDate對象放入到數據模型中
root.put("timer", new IndexOfMethod());
ftl模板里使用
<#assign x = "123112455445">
${timer("yyyy-MM-dd H:mm:ss", x)}
${timer("yyyy-MM-dd ", x)}

輸出
2001-10-12 5:21:12
2001-10-12

自定義 Transforms
實現自定義的<@transform>文本或表達式</@transform?>的功能,允許對中間的最終文本進行解析轉換

例子:實現<@upcase>str</@upcase?> 將str轉換成STR 的功能

代碼如下:
import java.io.*;
import java.util.*;
import freemarker.template.TemplateTransformModel;

class UpperCaseTransform implements TemplateTransformModel {

??? public Writer getWriter(Writer out, Map args) {
??????? return new UpperCaseWriter(out);
??? }

??? private class UpperCaseWriter extends Writer {
???????
??????? private Writer out;
???????????
??????? UpperCaseWriter (Writer out) {
??????????? this.out = out;
??????? }

??????? public void write(char[] cbuf, int off, int len)
??????????????? throws IOException {
??????????? out.write(new String(cbuf, off, len).toUpperCase());
??????? }

??????? public void flush() throws IOException {
??????????? out.flush();
??????? }

??????? public void close() {
??????? }
??? }
}??
然后將此對象put到數據模型中
root.put("upcase", new UpperCaseTransform());

在view(ftl)頁面中可以如下方式使用

<@upcase>
hello world
</@upcase?>

打印輸出:
HELLO WORLD

總結

以上是生活随笔為你收集整理的超全面的freemarker教程的全部內容,希望文章能夠幫你解決所遇到的問題。

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

欧美a视频在线观看 | 一区二区三区免费在线 | 久久久久欠精品国产毛片国产毛生 | 国产高清在线免费视频 | 亚洲成人av片在线观看 | 五月天久久综合网 | 亚洲欧美国产精品18p | 国模一区二区三区四区 | 久久久精华网 | 日韩专区中文字幕 | 中文字幕首页 | 成人91在线| 国产精品久久久久久一区二区三区 | 日韩欧美精品在线观看视频 | 久草视频精品 | 久草精品在线观看 | 日韩精品一区二区三区免费观看 | 午夜视频在线观看一区 | 在线看片日韩 | 欧美日本在线视频 | 欧美电影在线观看 | 热久久影视 | 精品久久免费 | 99中文视频在线 | 国产一级在线免费观看 | 欧美91精品 | 国产精品麻豆三级一区视频 | 精品久久视频 | 亚洲视频 视频在线 | 在线观看日本韩国电影 | 狠狠干电影 | 欧美精品久久久久久久 | 国产成年免费视频 | 欧美日韩一区二区三区视频 | 成人久久电影 | 国产亚洲精品久久久网站好莱 | 国内精品久久久久久中文字幕 | 91人网站 | 国产情侣一区 | 久久男女视频 | 国产精品久久精品国产 | 亚洲国产中文字幕在线观看 | 色婷婷狠狠18 | 国产精品一区二区在线观看免费 | 久久高清视频免费 | 开心激情婷婷 | 日韩av一区在线观看 | 午夜av在线免费 | 久久综合狠狠综合久久综合88 | 97操操| 在线a人片免费观看视频 | 国产糖心vlog在线观看 | 超碰av在线免费观看 | 午夜成人免费电影 | 伊香蕉大综综综合久久啪 | 久久99精品久久久久久秒播蜜臀 | 欧美日本高清视频 | 欧美成人精品三级在线观看播放 | 天堂激情网 | 日韩av线观看 | 日韩中文字幕免费视频 | 成人91在线观看 | 亚洲国产精品免费 | 国产成人一区二区啪在线观看 | 在线网站黄| 久久在线视频在线 | 91cn国产在线 | 久久久资源网 | 一区二区高清在线 | 日韩视频三区 | 国产亚洲精品成人av久久影院 | 免费观看av网站 | 天天射日 | 国产成人精品在线播放 | 国产精品一区二区麻豆 | 欧美另类美少妇69xxxx | 精品国产乱码久久久久久久 | 五月天综合网站 | 日韩a级黄色片 | 天天综合中文 | 曰本三级在线 | 精品在线视频一区二区三区 | 伊人天天综合 | 黄网在线免费观看 | 午夜av在线免费 | 国产精品网站一区二区三区 | 男女精品久久 | 日韩av成人免费看 | 国产精品对白一区二区三区 | 国产在线国偷精品产拍免费yy | 99国产成+人+综合+亚洲 欧美 | 日韩精品免费在线播放 | 国产精品久久电影观看 | 久久99网站 | 久久久久久久久久久国产精品 | 国产精品99蜜臀久久不卡二区 | 在线免费观看黄色av | 日韩免费中文 | 国产一区二区在线免费播放 | 亚洲精品一区二区三区新线路 | 日韩偷拍精品 | 四虎影视成人精品国库在线观看 | 精品一区二区电影 | 国产精品久久久久久久久蜜臀 | 国产美女精品人人做人人爽 | 国产在线观看99 | 超碰在线91 | 欧美日韩一区三区 | 亚洲精品免费观看 | 天天色天天爱天天射综合 | 国产免费亚洲高清 | 亚洲精品成人免费 | 国产精品资源在线观看 | bbbbb女女女女女bbbbb国产 | 99热最新网址 | 中文字幕在线观看免费高清完整版 | 久久久久久免费毛片精品 | 色综合婷婷 | 91在线资源 | 国产97视频在线 | 五月婷婷一区二区三区 | 99综合电影在线视频 | 婷婷国产视频 | 99精品一区二区 | 欧美精品久久久久性色 | 麻豆免费在线视频 | 午夜精品一区二区三区在线播放 | 天天操天天操天天操天天操天天操 | 操操操日日日 | 久久精品一区二区三区视频 | 国产精品久久久久久a | 精品一区二区免费视频 | 国产精品久久久久影院日本 | 青青草在久久免费久久免费 | 午夜精品视频一区 | 美女视频黄免费网站 | 69国产精品视频免费观看 | 久草视频在线免费 | 波多野结衣视频在线 | 狠狠狠狠狠狠狠狠干 | 伊人国产在线播放 | 日韩精品专区 | 97国产精品一区二区 | 欧美999| 日韩a在线播放 | 激情久久久 | 国产成人精品在线观看 | 久久综合中文字幕 | av一级网站 | 国产亚洲精品久久久久久久久久久久 | 天堂在线v | 免费能看的黄色片 | 在线精品在线 | 天天干天天射天天插 | 亚洲va在线va天堂 | 伊色综合久久之综合久久 | 碰超在线观看 | 亚洲精品成人在线 | 九九在线视频免费观看 | 毛片3 | 手机在线看片日韩 | 欧美一级视频一区 | 91在线亚洲| 91亚洲综合| 成人欧美一区二区三区在线观看 | 超碰在线色| 国产视频一区二区三区在线 | 日本mv大片欧洲mv大片 | 久热免费在线观看 | 日韩在线中文字幕视频 | 欧美性生活免费看 | 国产啊v在线观看 | 国产成人av网站 | 国产精品久久久久一区 | 玖玖综合网 | 婷婷激情五月综合 | 婷婷在线免费观看 | 麻豆视频免费在线观看 | 久久久久久免费视频 | 天天操天天干天天干 | 欧美动漫一区二区三区 | 免费成人在线电影 | 最近av在线 | 久久久久国产精品免费 | 久久99久久精品国产 | 国产日韩欧美在线影视 | 五月综合色婷婷 | 亚洲一区黄色 | 丁香婷婷综合网 | 日韩中文字幕电影 | 天天摸天天舔 | 午夜在线免费观看视频 | 中文字幕免费国产精品 | 怡红院成人在线 | 麻豆你懂的 | 日本性视频 | 久久久精品国产免费观看一区二区 | 久久久久 | 91av免费在线观看 | 国产视频日本 | 国产精品3 | 在线精品视频在线观看高清 | 久草观看 | 香蕉在线视频播放网站 | 最新色视频 | 精品99在线观看 | 日本 在线 视频 中文 有码 | 天天干,天天操 | 人人澡人人草 | 白丝av免费观看 | 精品高清视频 | 开心色插 | 激情五月av | 欧美色图另类 | 成人网在线免费视频 | 黄色av网站在线观看 | 91精品色 | 色偷偷88888欧美精品久久久 | 超碰97免费在线 | 国产一区二区高清 | 久久久久女教师免费一区 | 色婷婷国产精品 | 中文字幕乱码视频 | 丝袜+亚洲+另类+欧美+变态 | 欧美日韩一区二区三区不卡 | 一区二区三区四区五区六区 | 日韩欧美在线观看一区二区 | 狠狠狠色狠狠色综合 | www.夜夜操.com | 天海翼一区二区三区免费 | av在线播放中文字幕 | 特黄一级毛片 | 91看片看淫黄大片 | ww视频在线观看 | 亚洲午夜久久久综合37日本 | 97精品在线 | 美女视频黄,久久 | 玖玖综合网 | www久草| 香蕉视频在线观看免费 | 欧美激情va永久在线播放 | 涩涩爱夜夜爱 | 成人免费观看大片 | 2023国产精品自产拍在线观看 | 夜夜骑日日操 | 中文在线免费一区三区 | 五月婷婷播播 | 欧美国产一区在线 | 中文字幕在线免费观看 | 超碰在线94 | 成人av一级片 | 久草新在线 | 亚洲国产成人精品在线观看 | 精品五月天 | 中文字幕一区二区三区四区 | 久久美女高清视频 | 波多野结衣资源 | 免费在线成人av | 日韩精品一区二区不卡 | 日韩在线观看一区 | 精品久久久久久久 | 中文字幕免费观看全部电影 | 国产伦精品一区二区三区在线 | 中文在线字幕免费观看 | 国产艹b视频 | 成人啪啪18免费游戏链接 | 日产av在线播放 | 又黄又爽的视频在线观看网站 | 精品国产一区二区久久 | 亚洲欧美日韩国产一区二区三区 | 国产免费成人 | 伊人久久电影网 | 免费99精品国产自在在线 | 在线观看 亚洲 | 久久久精品高清 | 天天摸夜夜操 | 一级成人网 | 精品国产一区二区三区久久影院 | 综合婷婷| 国产精品久久久久国产a级 激情综合中文娱乐网 | 日韩一区二区三区免费电影 | 国产成免费视频 | 亚洲国产美女精品久久久久∴ | 欧美精品九九 | 久久免费99 | 欧美国产在线看 | 亚洲精品777| 欧美成年性 | 亚洲精品小视频 | 国产麻豆果冻传媒在线观看 | 911香蕉 | 97精品国产97久久久久久粉红 | 国产精品国产三级在线专区 | 国产精品久久久久久一二三四五 | 天天干,天天草 | 丁香婷婷综合激情 | 免费看一及片 | 91传媒激情理伦片 | 99视频精品全部免费 在线 | 欧美精品一区二区蜜臀亚洲 | 国产一级二级在线 | 国产美腿白丝袜足在线av | 中文字幕在线久一本久 | 精品国产成人av | av高清影院| 婷婷综合亚洲 | 蜜臀av性久久久久av蜜臀三区 | 黄色小说在线免费观看 | 亚洲精品视频久久 | 在线视频成人 | 新版资源中文在线观看 | 久久久污 | 九九热在线视频 | 天无日天天操天天干 | 亚洲资源在线 | 日日夜夜精品免费视频 | 国产精品a级 | 91av蜜桃| 国产精品igao视频网入口 | 91精品国产一区二区在线观看 | 久色婷婷 | 又爽又黄在线观看 | 国产啊v在线观看 | 一区免费视频 | 黄色不卡av | 久久99国产综合精品 | 日韩大片在线看 | 波多野结衣小视频 | 久久香蕉国产精品麻豆粉嫩av | 亚洲天堂在线观看完整版 | 欧美日韩精品影院 | 中文字幕亚洲精品在线观看 | 免费毛片一区二区三区久久久 | 日日干美女 | 91麻豆国产福利在线观看 | 国产精品一区二区电影 | 日韩理论片在线观看 | 国产精品国产三级国产aⅴ无密码 | 在线观看久草 | 狠狠色丁香婷婷综合最新地址 | 天天操一操| 一区二区三区在线免费观看 | 国产区精品区 | 日韩字幕在线 | 国产日本亚洲高清 | 日日夜夜操av | 免费婷婷| 黄色电影网站在线观看 | 久久久久久久久久网站 | 欧美一级激情 | 国产 日韩 欧美 在线 | av一级网站| 天天夜夜亚洲 | 天天综合操 | 天天综合网 天天综合色 | 国产成人久久av | 91香蕉亚洲精品 | 天天综合天天做天天综合 | 粉嫩av一区二区三区四区 | 日韩中文字幕免费在线播放 | 狠狠狠综合 | 麻豆va一区二区三区久久浪 | 韩国精品福利一区二区三区 | 国产91精品在线观看 | 成年人免费电影在线观看 | 色噜噜在线观看视频 | 亚洲性少妇性猛交wwww乱大交 | 欧美精品少妇xxxxx喷水 | 视频在线亚洲 | 97在线影院 | 麻豆视频在线免费观看 | 国产h在线观看 | 国产精品久久久久久久久岛 | 午夜久久成人 | 日韩精品中文字幕在线播放 | 免费观看的黄色 | 久热免费在线观看 | 亚洲涩涩涩 | 成人影片在线播放 | 久久综合色天天久久综合图片 | 日韩激情片在线观看 | 精品日韩中文字幕 | 四虎影视4hu4虎成人 | 国产精品11 | 成人在线播放网站 | 欧美激情综合网 | 日韩在线观看影院 | 国产美女免费观看 | 成人午夜黄色影院 | www.97色.com| 久久精品99久久久久久2456 | 夜夜爽www| 夜夜躁日日躁狠狠久久88av | 中文字幕色在线 | 久久中文字幕导航 | 欧美日韩高清一区二区三区 | 免费av大片 | 在线观看日本高清mv视频 | 国产中文字幕网 | av电影免费| 99久久视频 | 天天射狠狠干 | 午夜精品一区二区三区在线播放 | 天天舔天天搞 | 日韩在线视频观看免费 | 日韩欧美综合精品 | 国产96视频| 日韩在线播放视频 | 天天操天天射天天 | 婷婷综合亚洲 | 久久 在线 | 国产精品九九九九九 | 亚洲欧洲成人 | 日韩激情影院 | 日韩精品免费一线在线观看 | 狠狠狠狠狠狠天天爱 | 国内精品久久天天躁人人爽 | 亚洲精品美女久久久久 | 欧美 另类 交| 久久国内免费视频 | 九九九视频精品 | 婷婷成人亚洲综合国产xv88 | 亚洲精品视频在线观看免费视频 | 97在线免费视频 | 中文字幕在线有码 | 色91在线视频 | 免费在线成人 | 免费三级黄色片 | 久久国产欧美日韩 | 国产精品久久久久久久久久久久午夜 | 精品国产一区二区三区av性色 | 久久国产成人午夜av影院潦草 | 亚洲乱码在线观看 | 欧美有色| 亚洲一区二区91 | 亚洲日本va中文字幕 | 色婷婷激情四射 | 麻豆系列在线观看 | 欧洲av不卡| 精品久久久久久国产偷窥 | 九九九在线 | 黄色特一级片 | 狠狠色丁香婷综合久久 | 久草视频在线资源 | 成人国产一区二区 | 国产黄色精品在线 | 91亚洲精品久久久蜜桃 | 中文字幕国语官网在线视频 | 国内精品久久久久影院优 | 亚洲精品美女视频 | 国产精品 国产精品 | 国产一区二区三区在线免费观看 | av一区在线 | 又爽又黄又无遮挡网站动态图 | 亚洲成人黄色 | 成人福利在线播放 | 亚洲成人精品 | 国产精品免费在线观看视频 | www.久久精品视频 | aaa日本高清在线播放免费观看 | 开心激情五月婷婷 | 99久久精品网 | 99热这里只有精品1 av中文字幕日韩 | 久久久久高清毛片一级 | 久久av黄色 | 日日日爽爽爽 | 欧美有色| 亚洲资源 | 97国产在线播放 | 欧美日韩在线免费观看 | 天天鲁一鲁摸一摸爽一爽 | 欧美激情综合色 | 蜜臀av.com | 日本性生活一级片 | 久久热首页 | 日韩天天操| 免费av的网站| 色91av | 精品久久精品久久 | 黄色网在线播放 | 91麻豆精品国产自产在线 | 久久午夜电影网 | 色是在线视频 | 国产美女视频一区 | 日本不卡视频 | 国产大片黄色 | 在线视频久久 | 亚洲va欧洲va国产va不卡 | 亚洲精品小视频 | 亚洲免费小视频 | 国产成人精品久久久久 | 国产成人一区二区三区在线观看 | 中文字幕在线播放一区 | 人人爽人人爽 | 国产精品美女久久久久久久 | 天天射天天爱天天干 | 精品国产乱码久久久久久久 | 精品国产一区二区三区四 | 免费观看午夜视频 | 国产夫妻自拍av | 亚洲视频资源在线 | 午夜在线免费观看 | 天天色天天操天天爽 | 日韩高清在线不卡 | 欧美成人基地 | 青青草国产成人99久久 | 欧美9999 | 九七视频在线观看 | 国产黄色片免费在线观看 | 中文字幕久久精品亚洲乱码 | 中文字幕免费观看 | 国产99久久九九精品免费 | 欧美精品一二三 | 日本精品视频一区 | 毛片网站免费在线观看 | 国产精品精 | 黄色av影院| 1区2区视频 | 中文字幕免费一区二区 | 麻豆91精品视频 | 91最新网址 | 久色网 | 国产成人久久av | 日韩在线观看视频中文字幕 | www.日日日.com| 久久精品视频免费播放 | 亚洲日本成人 | 在线看中文字幕 | 亚洲国产精品电影在线观看 | 韩日电影在线观看 | 天天做天天爱天天爽综合网 | 国产成人99av超碰超爽 | 91日韩免费| www178ccom视频在线| 日韩电影在线观看一区二区三区 | 在线国产黄色 | 伊人天天操 | 91成人免费观看视频 | 日本在线观看一区 | a视频免费在线观看 | 午夜视频在线观看一区二区三区 | 人人爽人人澡人人添人人人人 | 五月激情在线 | 日韩一区二区在线免费观看 | 日韩精品中文字幕在线 | 成人免费在线播放 | 一区二区三区在线免费观看 | 久久黄色免费观看 | 1024手机基地在线观看 | 婷婷六月天在线 | 久久中文字幕导航 | 91精品成人| 精品国产观看 | 综合色播| 欧美一级性生活视频 | 日韩久久视频 | 成人免费视频播放 | 天天综合在线观看 | 最近中文字幕高清字幕免费mv | 日本公妇色中文字幕 | 人人干人人做 | 久久久网页 | 四虎成人精品永久免费av | 国产精品系列在线 | 国产精品2020| 激情五月看片 | 最新av在线播放 | 91大神在线观看视频 | 超碰97在线看 | 久久久久国产精品一区 | 久久亚洲综合国产精品99麻豆的功能介绍 | 日韩午夜一级片 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 国产尤物在线观看 | 日本中文字幕在线一区 | 五月婷婷在线观看 | 91插插插免费视频 | 九九九国产| 亚洲精品自拍视频在线观看 | 久久久久久免费视频 | av免费观看高清 | 国产片网站 | 成人久久网 | 九九综合九九 | 午夜精品成人一区二区三区 | 免费观看第二部31集 | 天天躁天天狠天天透 | 超碰在线1| 丁香婷五月 | 国产精品久久久久久久妇 | 中文字幕日本在线 | 久精品视频 | 色橹橹欧美在线观看视频高清 | 色欲综合视频天天天 | 日韩免费b | 亚洲精品五月 | 精品国产伦一区二区三区免费 | 中文字幕久久久精品 | 射久久久 | 久草久草在线观看 | 久久一区二区三区超碰国产精品 | 五月花丁香婷婷 | 亚洲最新在线 | va视频在线观看 | 国产精选在线观看 | 网站在线观看日韩 | 黄网站色| 色妞色视频一区二区三区四区 | 福利一区在线 | av短片在线观看 | 久久99精品国产麻豆宅宅 | 91丨九色丨丝袜 | 国产精品美女www爽爽爽视频 | 97品白浆高清久久久久久 | 日韩91在线| 免费观看久久 | 国产高清久久 | 日韩久久精品 | 国产福利91精品 | aaawww| 久久综合影院 | 探花在线观看 | 97在线观看免费观看高清 | 在线av资源 | 福利一区在线视频 | 99视频在线观看视频 | 伊人亚洲综合 | 日韩女同av | 国产一区在线免费观看 | 91av电影在线 | 免费精品国产va自在自线 | 91在线免费视频观看 | 日韩和的一区二在线 | 日韩电影在线观看一区 | 亚洲精品网站在线 | 国产精品久久久久久久久蜜臀 | 日韩高清不卡一区二区三区 | 日本精品久久久一区二区三区 | 亚洲国产资源 | 麻豆视频在线免费观看 | 少妇高潮流白浆在线观看 | 手机av在线网站 | 狠狠干夜夜操天天爽 | 欧美一区二区精美视频 | 中文字幕之中文字幕 | 国产成人三级一区二区在线观看一 | 亚洲久草网| 亚洲一二三久久 | 久久好看免费视频 | 超碰在线94 | 蜜桃av久久久亚洲精品 | 久草视频网 | 欧美一区二区三区激情视频 | 9i看片成人免费看片 | 精品一区二区三区久久 | 国产精品一区二区久久 | 亚洲在线色 | 美女视频黄免费网站 | 天天干.com | av在线网站观看 | 99电影| 91aaa在线观看 | 欧美a在线免费观看 | 激情综合色综合久久综合 | 亚洲成人黄色网址 | 成人久久18免费网站图片 | av在线日韩 | 中文字幕在线中文 | www.国产精品 | 天天做天天射 | 亚洲尺码电影av久久 | 亚洲午夜久久久影院 | 国产精品久久久久久久久久久杏吧 | 92国产精品久久久久首页 | 中文字幕乱在线伦视频中文字幕乱码在线 | 中文视频在线 | 久久精品视频一 | 91理论片午午伦夜理片久久 | 超碰成人网| 午夜黄色一级片 | 国产午夜精品久久 | 色丁香综合 | 亚洲精品午夜国产va久久成人 | 91精品国自产在线偷拍蜜桃 | 99精品视频在线免费观看 | 色吧久久 | 国产 一区二区三区 在线 | 手机av电影在线观看 | 中文亚洲欧美日韩 | 中文亚洲欧美日韩 | 91av在线播放视频 | 国产中文字幕免费 | 国产精品二区在线 | 中文字幕高清有码 | 伊人黄 | 久久这里精品视频 | 精品国产乱码久久久久久1区2匹 | 久久观看免费视频 | 国产精品久久久久久久久久新婚 | 九色琪琪久久综合网天天 | 美女视频a美女大全免费下载蜜臀 | 精品一区二区av | 日本高清中文字幕有码在线 | 久久免费成人精品视频 | 天天爽夜夜爽人人爽一区二区 | 成人午夜电影免费在线观看 | 国产亚洲精品久久久久久电影 | 五月天欧美精品 | 国内精品久久久久影院日本资源 | 天天草天天干天天射 | 97在线视| 色丁香久久 | 国产视频久久久 | 五月亚洲综合 | 99久久99久久综合 | 国内视频一区二区 | 婷婷五月色综合 | 国产自制av | 99热这里有| av在线直接看 | 日韩毛片在线免费观看 | 福利在线看片 | 特黄免费av | 91丨九色丨国产在线观看 | 一区二精品 | 日本中文字幕在线看 | av免费片 | av免费在线观看网站 | 毛片.com| 91精品少妇偷拍99 | 永久中文字幕 | 日日摸日日 | 免费观看av | 在线亚洲午夜片av大片 | 狠狠干干 | 在线午夜电影神马影院 | 91一区一区三区 | 日韩欧美在线观看 | 三级a毛片 | 激情婷婷在线观看 | 久久69精品 | 日韩久久精品一区二区 | 福利电影久久 | 99精品福利 | 在线观看一区视频 | 91系列在线 | 在线观看黄污 | 国产一级高清视频 | 午夜精品久久一牛影视 | 午夜精品影院 | 在线看黄色的网站 | 日韩欧美在线一区 | 国内久久精品视频 | 国产精品成人av久久 | 国产高清在线免费 | 精品福利片 | 在线中文字幕播放 | 免费国产在线精品 | 天堂网av在线 | 国产精品欧美久久久久天天影视 | 国产精品免费一区二区三区 | 久久激五月天综合精品 | 久草国产精品 | 99久久精品国产一区二区三区 | 久草在线资源观看 | 午夜精品福利一区二区三区蜜桃 | 成人亚洲网 | 亚洲精品视频第一页 | 99精品久久久久久久 | 丁香婷婷色月天 | 欧美日韩视频在线一区 | 国模一区二区三区四区 | 新版资源中文在线观看 | 亚洲成人黄色在线观看 | 免费麻豆网站 | 99色精品视频 | 在线中文字幕一区二区 | 亚洲国产三级在线观看 | 中文字幕精 | 国产一区高清在线 | 亚洲精品 在线视频 | 91福利视频久久久久 | 国产破处视频在线播放 | 亚洲精品乱码久久久久 | 在线观看黄色av | 超碰97国产精品人人cao | 久久激情电影 | 日韩黄色中文字幕 | 草久在线播放 | 97成人资源 | 日韩h在线观看 | av中文字幕网站 | 在线播放av网址 | 国产精品嫩草影院9 | 97视频在线观看成人 | 亚洲男模gay裸体gay | 开心色婷婷 | 最近更新好看的中文字幕 | 国产成人a亚洲精品v | 国产欧美综合在线观看 | 一区 二区 精品 | 欧美日韩国产亚洲乱码字幕 | 黄色软件网站在线观看 | www免费在线观看 | 91精品视频在线观看免费 | 99精品欧美一区二区 | 69亚洲乱| 国产精品午夜久久久久久99热 | 亚洲精品国产高清 | 国产成人精品亚洲 | 91成人免费在线 | 综合激情av | 久久露脸国产精品 | 激情xxxx| 日韩视频一区二区三区 | 最新精品国产 | 久久精品毛片基地 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 中文字幕在线视频网站 | 日韩免费一区二区 | 中文字幕乱码电影 | 精品国产自在精品国产精野外直播 | 欧美精品久久久久久久亚洲调教 | 天堂在线视频免费观看 | 久久亚洲视频 | 国产精品1区2区3区 久久免费视频7 | 一级片观看 | 99视频免费在线观看 | 久久婷综合| 国产福利电影网址 | 亚洲中字幕 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 国产一级黄 | 国产精品麻豆视频 | 欧美巨乳波霸 | 最近的中文字幕大全免费版 | 91精品国产综合久久婷婷香蕉 | 美女视频黄免费的久久 | www天天干 | 成人久久18免费网站 | 亚洲无吗视频在线 | 日日干精品 | 很黄很色很污的网站 | 一色屋精品视频在线观看 | 亚洲精品国精品久久99热一 | 99久久999久久久精玫瑰 | 天堂av观看 | 久久日本视频 | 免费观看成人 | 中文字幕字幕中文 | 国产女v资源在线观看 | 亚洲欧美日韩不卡 | 久久国产手机看片 | 在线观看免费视频 | 九九九视频在线 | 久久久久久福利 | 亚洲综合在线五月天 | 成人播放器 | 日韩草比 | 992tv在线观看 | 国内精品久久久久久久影视麻豆 | 精品久久片 | 欧美日产在线观看 | 日韩av一区二区在线影视 | 亚洲精品视频免费观看 | 在线观看中文字幕一区二区 | 国产精品99精品 | 欧美狠狠色 | 在线观看成人毛片 | 在线 成人 | 国产96在线视频 | 免费视频一区二区 | av五月婷婷| 91豆麻精品91久久久久久 | 日韩在线观看三区 | 国内少妇自拍视频一区 | 亚洲精品88欧美一区二区 | www色| 欧美天堂久久 | 香蕉视频免费看 | 久草在线在线精品观看 | 精品夜夜嗨av一区二区三区 | 九九在线高清精品视频 | 激情黄色av| 五月激情视频 | 国产福利午夜 | 国产精品激情在线观看 | 91毛片视频| 亚洲午夜精品久久久 | 成人免费视频播放 | 黄色一级免费电影 | 天天射射天天 | 国产综合91| 九九视频网站 | 韩国中文三级 | 婷婷色在线 | 在线看污网站 | 精品一区 在线 | 国产精品中文久久久久久久 | 狠狠狠操 | 91视频在线观看大全 | 国产黄a三级三级三级三级三级 | 99久久婷婷国产综合亚洲 | 五月婷婷另类国产 | 日韩欧美国产激情在线播放 | 国产精品欧美日韩 | 国产精品久久久久婷婷 | 在线视频日韩 | 精品久久久久久久久中文字幕 | 日韩精品久久久免费观看夜色 | 91黄色视屏 | 亚洲精品婷婷 | 国内精品中文字幕 | 国内视频在线观看 | 国产精品欧美久久久久天天影视 | 国内精品久久久久影院一蜜桃 | 国模吧一区 | 99国产精品视频免费观看一公开 | 黄色电影在线免费观看 | 中文字幕 影院 | 91麻豆精品国产91久久久使用方法 | www.狠狠操.com| 欧美日韩国内在线 | 一级片免费观看 | 久久9999久久免费精品国产 | 亚洲精品成人网 | 天天久久综合 | 人人玩人人添人人澡超碰 | 久久视频一区二区 | 久久久久人人 | 99热超碰在线 | 在线观看精品一区 | 国产裸体bbb视频 | 麻豆视频免费在线 | 久久99亚洲精品久久 | 国产人成看黄久久久久久久久 | 中文字幕av免费 | 亚洲欧洲国产精品 | 国产视频精选在线 | 欧美精品一区二区性色 | 在线免费视频你懂的 | 97激情影院| 精品久久91 | 综合久久网| 国产午夜在线 | 日韩午夜网站 | 九九热re | 日韩中文字幕一区 | 久久久91精品国产一区二区三区 | 久久精品伊人 | 久草在线网址 | 黄色中文字幕在线 | 久久福利国产 | 热久久视久久精品18亚洲精品 | 黄色大片av| 天天射天天射天天射 | 中文字幕人成乱码在线观看 | 中文字幕乱在线伦视频中文字幕乱码在线 | 亚洲电影第一页av | 日韩欧美综合视频 | 日韩久久精品一区二区 | 97超碰香蕉 | 国产麻豆精品久久一二三 | 国产精品中文字幕在线 | 成人av教育 | 夜夜夜夜夜夜操 | 日韩在线观看视频网站 | 婷婷精品国产一区二区三区日韩 | 香蕉97视频观看在线观看 | 中文在线www | 美女一级毛片视频 | 天天se天天cao天天干 | 日韩免费高清 | 久久人人爽人人爽人人片 | 中文字幕免费不卡视频 | 国产精品久久久久四虎 | 国产精品福利无圣光在线一区 | 午夜精品福利在线 | 国产色视频| 天天看天天干天天操 | 天天天干天天天操 | 久久99热这里只有精品 | 日批网站在线观看 | 久久91久久久久麻豆精品 | 成人在线播放免费观看 | 欧美日韩免费视频 | 精品国产一二三四区 | 精品中文字幕在线播放 | 2021国产精品| 国产在线美女 | 99精品视频中文字幕 | 国产明星视频三级a三级点| 国产精品国内免费一区二区三区 | 日韩精品在线免费观看 | 青草视频在线免费 | 五月婷网 | 亚洲经典视频在线观看 |