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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

displayTag

發(fā)布時(shí)間:2023/12/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 displayTag 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?寫點(diǎn)兒東西真不容易,暫時(shí)寫了這么些,先貼于此。
[b]DisplayTag Tutorial by DarrenWang[/b]
?????????????????? CopyRight June,2004:em510:
?????????????????? By DarrenWang,All Rights Reserved!

[b]【簡(jiǎn)介Introduction】[/b]
DisplayTag是一個(gè)開源的自定義標(biāo)簽庫(kù)(Custom Tag lib),他提供了直接而有效的格式化web視圖層數(shù)據(jù)的有效手段。你可以在現(xiàn)在流行的web應(yīng)用的MVC模式中集成DisplayTag到View層,其提供的強(qiáng)大表格格式化功能一定會(huì)令你愛不釋手?;蛟S上面說(shuō)的有些夸張了,但是DisplayTag在表格的格式化方面表現(xiàn)確實(shí)出色,當(dāng)然,他也只能顯示表格,視圖層的大部分工作不就是使用表格來(lái)格式化數(shù)據(jù)嘛?!
?好了,讓我們通過圖片來(lái)看看他是一個(gè)什么樣子吧!^_^
[img]http://displaytag.sourceforge.net/images/sample_snapshot.png[/img]
怎么樣?是不是感覺不錯(cuò)那?如果答案是肯定的,那么你一定急著想自己試一試咯?!不要急,下面就讓我們開始我們的DisplayTag之旅。

[b]【Hello DisplayTag】[/b]
既然是一個(gè)tutorial,所以,我們不想對(duì)像自定義標(biāo)簽的實(shí)現(xiàn)原理等進(jìn)行解釋,也就是說(shuō)在此之前,我們假定你已經(jīng)對(duì)自定義標(biāo)簽有一定的認(rèn)識(shí),當(dāng)然,沒有也無(wú)所謂,等這篇tutorial完成后,你估計(jì)就會(huì)了解的差不多了。
?吶,讓我們從最簡(jiǎn)單的displaytag的使用開始,就跟你的第一個(gè)程序往往是從HelloWorld程序開始一樣。
?先忽略其他的配置問題,我們的JSP文件的源代碼如下:
[img]/user11/darrenwang/upload/2004639261011063.gif[/img]
實(shí)際上,除去初始化和數(shù)據(jù)準(zhǔn)備等操作,生成表格的代碼只有一行,那就是:
<display:table name="InfoList">
</display:table>
?而他生成的表格就是這樣的:
[img]/user11/darrenwang/upload/200463927041199.gif[/img]
怎么樣?是不是很簡(jiǎn)單那?簡(jiǎn)單的代碼就可以生成如此漂亮的表格,你有理由不用嘛?(因?yàn)槭褂昧薙truts的LabelValueBean,所以表格上顯示了原始的title,不用著急,后面我們將會(huì)說(shuō)道如何修改成你所期待的樣子)

[b]【配置configuration】[/b]
Ok,在我們運(yùn)用DisplayTag之前,我們需要對(duì)他的使用環(huán)境進(jìn)行一些配置,或許有些復(fù)雜,但是,如果你是一個(gè)WebApp老手的話,其實(shí)并不難。
?當(dāng)然,在此之前,我們需要下載DisplayTag,當(dāng)前的最新版本是displaytag-1.0-b3。你可以去SourceForge下載它,下載網(wǎng)址是:http://displaytag.sourceforge.net/download.html 。
?2.1 DisplayTag的類庫(kù),依賴庫(kù)和TLD文件的添加
?解壓下載下來(lái)的displaytag的壓縮包,之后依次拷貝displaytag-1.0-b3.jar和lib目錄下面的所有jar文件到你自己的WEBAPP_HOME/WEB-INF/lib目錄下面,拷貝displaytag-11.tld,displaytag-12.tld和displaytag-el-12.tld到WEBAPP_HOME/WEB-INF目錄下面。
?他的依賴庫(kù)包括:commons-beanutils,commons-collections,commons-lang以及commons-logging。
?這里需要注意的問題就是,如果你連同Struts一起使用的話,DisplayTag的依賴庫(kù)實(shí)際上都包括在Struts1.1的發(fā)布包中,你只需要將displaytag-1.0-b3.jar文件拷貝到你自己的WEBAPP_HOME/WEB-INF/lib目錄下面就可以了。
?另外一個(gè)重要的問題就是,如果你的Struts1.1發(fā)布包中的commons lang包不是2.0版本或者更高版本的話,需要去Apache的Jakarta commons項(xiàng)目主頁(yè)上下載2.0版本的commons-lang類庫(kù),并替換掉原來(lái)的commons-lang類庫(kù),否則,運(yùn)行的時(shí)候?qū)?bào)錯(cuò)誤并不能運(yùn)行。
?2.2 web.xml的配置
?要使用DisplayTag提供的自定義標(biāo)簽,跟其他自定義標(biāo)簽的使用沒有什么兩樣,同樣,需要在web.xml文件中注冊(cè)taglib,下面是筆者的web.xml文件中taglib注冊(cè)的片斷:
<taglib></taglib>
??? <taglib-uri></taglib-uri>http://displaytag.sf.net
??? <taglib-location></taglib-location>/WEB-INF/displaytag-11.tld
?
? <taglib></taglib>
??? <taglib-uri></taglib-uri>http://displaytag.sf.net
??? <taglib-location></taglib-location>/WEB-INF/displaytag-12.tld
?
? <taglib></taglib>
??? <taglib-uri></taglib-uri>http://displaytag.sf.net/el
??? <taglib-location></taglib-location>/WEB-INF/displaytag-el-12.tld
?
?在這里有必要說(shuō)明一下這三個(gè)tld之間的區(qū)別,這其實(shí)在DisplayTag的官方網(wǎng)站上有提到,這里只是重復(fù)一下:displaytag-11.tld 只是提供對(duì)JSP1.1規(guī)范的的支持,而displaytag-12.tld則提供了對(duì)JSP1.2規(guī)范的支持,最后的displaytag-el-12.tld除了提供跟displaytag-12.tld提供的特性之外,他提供對(duì)Expression Lanuage的支持。所以,為了在web應(yīng)用移植于不同的app server的時(shí)候可以更少的修改文件,這里將所有的tld都添加在這里以便使用。
?配置完成taglib后,下面是可選擇的配置項(xiàng),如果你不需要的話,可以不進(jìn)行配置,但建議還是配置他們?yōu)楹谩?br /> ?第一幅圖中可以看到diaplaytag提供了數(shù)據(jù)的導(dǎo)出功能,如果說(shuō)你的Table存在的頁(yè)面被include在另一個(gè)頁(yè)面中,比如如果你使用Struts的話,那么Tiles的使用就是這種情況,那么你需要為web.xml中添加filter,以便數(shù)據(jù)到處功能能夠工作正常。
?首先,在web.xml中添加以下filter配置項(xiàng)(按照web.xml文件中各個(gè)elements的順序規(guī)定,需要將<filter></filter>元素添加在<servlet></servlet>前面,以下類似的情況請(qǐng)參考web.xml規(guī)范):
?<filter></filter>
<filter-name></filter-name>ResponseOverrideFilter
<filter-class></filter-class>org.displaytag.filter.ResponseOverrideFilter

?其次,添加filter的映射:
?<filter-mapping></filter-mapping>
<filter-name></filter-name>ResponseOverrideFilter
<url-pattern></url-pattern>*.do

<filter-mapping></filter-mapping>
<filter-name></filter-name>ResponseOverrideFilter
<url-pattern></url-pattern>*.jsp

?這樣,對(duì)于web.xml的配置基本就完成了。對(duì)于I18N在web.xml文件中進(jìn)行配置的手段,將在后面提到,不歸入此類。
?2.3屬性文件的配置(displaytag.properties)
?DisplayTag提供了一個(gè)屬性文件(displaytag.properties)來(lái)定義表格顯示的時(shí)候提供的信息,比如分頁(yè)顯示或者導(dǎo)出數(shù)據(jù)等的提示信息等,但是因?yàn)檫@個(gè)屬性文件默認(rèn)的文件隨jar文件一起發(fā)布而且是英文的,所以,我們需要對(duì)其進(jìn)行定制以滿足中文或者其他平臺(tái)下的使用。
?要對(duì)這個(gè)屬性文件進(jìn)行定制,有三種途徑:
?【1】使用<display:setproperty>標(biāo)簽,這個(gè)標(biāo)簽可以對(duì)單個(gè)的屬性進(jìn)行設(shè)置,也就是說(shuō)如果要對(duì)整個(gè)的應(yīng)用頁(yè)面都進(jìn)行定制的話,需要每個(gè)頁(yè)面都使用這個(gè)標(biāo)簽并對(duì)每一個(gè)要定制的屬性都使用它,這很明顯不是太行得通,所以,displaytag還提供了下面得途徑;
?【2】使用DisplayPropertiesLoaderServlet來(lái)初始化環(huán)境,這種方式方式可以對(duì)整個(gè)應(yīng)用的屬性進(jìn)行定制,但是,筆者使用這種方式的時(shí)候報(bào)錯(cuò),不過,還是將其在web.xml文件中的配置項(xiàng)列于此:
<servlet id="DisplayPropertiesLoaderServlet"></servlet>
??? <servlet-name></servlet-name>DisplayPropertiesLoaderServlet
??? <display-name></display-name>DisplayPropertiesLoaderServlet
??? <description></description>displaytag initialization servlet
<servlet-class></servlet-class>org.displaytag.properties.DisplayPropertiesLoaderServlet
??? <init-param></init-param>
????? <param-name></param-name> properties.filename
????? <param-value></param-value> /WEB-INF/displaytag.properties
???
??? <load-on-startup></load-on-startup>1
?
?這種方法也是讀取diaplaytag.properties中的屬性配置對(duì)整個(gè)應(yīng)該環(huán)境進(jìn)行定制。
?最后,也就是就第三中方式,也是筆者最常用的方式,那就是:
?【3】新建一個(gè)diaplaytag.properties屬性文件,向該文件中添加需要覆蓋的或者需要另外定制的屬性(具體有那些屬性,DisplayTag網(wǎng)站提供了一個(gè)PDF格式的manual,上面有所有可以使用的屬性的列表,因?yàn)樘L(zhǎng),所以這里不作羅列)。這個(gè)文件的一個(gè)樣本筆者將在后面的實(shí)例部分進(jìn)行羅列。在準(zhǔn)備好屬性文件后,將其放到WEBAPP_HOME/WEB-INF/classes目錄下面就可以了。我想這也比其他方式方便的多,另外,這種方式也是針對(duì)整個(gè)的WEB應(yīng)用進(jìn)行定制。
?以上就是配置文件的三種配置方式,第一種只能對(duì)單個(gè)屬性單個(gè)頁(yè)面進(jìn)行,而后面兩種方式可以針對(duì)整個(gè)的web應(yīng)用,尤其是第三種方式,筆者尤其倡導(dǎo)。
?2.4 CSS和img的移植
?如果說(shuō)你試著將頁(yè)面中的這一句去掉的話:
<link media="screen, print" href="&lt;%=request.getContextPath()%&gt;/css/screen.css" type="text/css" rel="stylesheet">,或許你會(huì)看到不想看到的景象,或者說(shuō)你看到的表格將與你所期待的大相徑庭:
[img]/user11/darrenwang/upload/2004639444276758.gif[/img]
怎么樣?與上面的簡(jiǎn)單實(shí)例相比,是不是淡色不少?!所以,要使得Displaytag提供最好的顯示效果,或者說(shuō)要顯示正常,我們不但要保證服務(wù)器端的配置,同樣的也要保證視圖層的配置,比如說(shuō)CSS和Images。
?故此,建議將下載的壓縮包中的diaplaytag.war文件包中的css目錄和img目錄拷貝到你當(dāng)前工作的WEBApp的根目錄下面,這樣,就可以避免以上的事情發(fā)生。當(dāng)然,這只是可以正常顯示的必要條件,像上面那樣,如果頁(yè)面中不引入css的話,同樣會(huì)顯示不正常。
?至此,你的Displaytag的配置就算完成了。怎么樣?是不是有些繁瑣那?!不過不用擔(dān)心,與它所帶給你的便捷和強(qiáng)大的功能相比,這算不了什么。
?好了,下面就讓我們對(duì)它的一些概念進(jìn)行一下探索吧!</display:setproperty>

[b]DisplayTag Tutorial by DarrenWang[/b]
?????????????????? CopyRight June,2004:em510:
?????????????????? By DarrenWang,All Rights Reserved!
接上回書說(shuō)道,:em325:
[b]【displaytag提供的自定義標(biāo)簽說(shuō)明】[/b]

DisplayTag一共提供了五種標(biāo)簽用來(lái)顯示顯示表格,他們是<display:table>,<display:column>,<display:setproperty>,<display:caption>和<display:footer>。通過這幾個(gè)標(biāo)簽的組合可以完成大部分表格的顯示功能。下面,筆者將就各個(gè)標(biāo)簽情況做一闡述,其中將會(huì)包括其功能以及使用中可能遇到的問題。
3-1 <display:table>標(biāo)簽說(shuō)明
DisplayTag標(biāo)簽庫(kù)的頂層標(biāo)簽,用來(lái)顯示整體的表格,通過從不同的scope中抽取數(shù)據(jù)并進(jìn)行顯示,根據(jù)Collection形式的數(shù)據(jù)中的屬性標(biāo)志來(lái)羅列數(shù)據(jù)。剩下的所有的diplaytag標(biāo)簽都嵌套于此標(biāo)簽之內(nèi)。他所提供的主要功能包括:以CSV,XML和Excel形式導(dǎo)出數(shù)據(jù);對(duì)于較長(zhǎng)的數(shù)據(jù),提供分頁(yè)顯示功能等等。
實(shí)例代碼:
<display:table name="sessionScope.InfoList" export="true" pagesize="3" requesturi="">
</display:table>
?該標(biāo)簽有一系列的屬性(Attribute),因?yàn)樘?#xff0c;這里僅就幾個(gè)主要而常用的進(jìn)行說(shuō)明:</display:table></display:footer></display:caption></display:setproperty></display:column></display:table>

?Name屬性:必須指定,表示scope中的數(shù)據(jù)標(biāo)志,通過name來(lái)引用scope中的數(shù)據(jù)并進(jìn)行顯示??梢灾付╬ageScope,requestScope,sessionScope和applicationScope。其中requestScope是缺省的scope,如果數(shù)據(jù)像request.setAttribute(“Infolist”,list)的形式放入requestScope,那么name屬性可以直接像[name=“Infolist”]的形式指定。而像sessionScope的話,就要像上面的例子中那種形式指定了。

?Id屬性:指定顯示表格的唯一標(biāo)志,在后面你可以通過yourID_rowNum的形式顯示或者使用每行數(shù)據(jù)的行號(hào)。比如:如果指定id=”tableID”,那么,就會(huì)輸出數(shù)據(jù)的行號(hào)。而指定id的另一個(gè)作用就是,如果一個(gè)頁(yè)面中有多個(gè)分頁(yè)顯示表格的話,指定id后,各個(gè)表格的分頁(yè)就可以工作正常。

?Export屬性:需要指定boolean型的值,如果指定export=true的話,表格顯示完成后,下面會(huì)有一個(gè)輸出項(xiàng)條目,指定數(shù)據(jù)導(dǎo)出的選項(xiàng);否則,不顯示數(shù)據(jù)導(dǎo)出條目。默認(rèn)為false。
?
?Pagesize屬性:指定每頁(yè)最多顯示的數(shù)據(jù)總數(shù)。如果要顯示的數(shù)據(jù)記錄很長(zhǎng)的話,指定pagesize后,數(shù)據(jù)將按照pagesize屬性指定的數(shù)目顯示記錄數(shù),其他的數(shù)據(jù)將分多個(gè)頁(yè)面顯示。如果不指定該屬性,所有數(shù)據(jù)將在一個(gè)頁(yè)面顯示。
?
?Class屬性:指定表格顯示所要使用的css風(fēng)格,displaytag提供了ISIS,ITS,Mars,Simple,Report五種風(fēng)格,默認(rèn)是ISIS,也就是上面的黃色色調(diào)的風(fēng)格。這些風(fēng)格都是在screen.css文件中定義的,可以根據(jù)需要修改或者添加需要的風(fēng)格。
?
?RequestURI屬性:當(dāng)表格需要數(shù)據(jù)導(dǎo)出,排序或者分頁(yè)顯示的時(shí)候,因?yàn)橐峤唤o指定的URL處理,而這個(gè)屬性就是做這個(gè)事情的。

?Sort屬性:用來(lái)指定對(duì)數(shù)據(jù)進(jìn)行排序的時(shí)候是對(duì)整個(gè)的數(shù)據(jù)list進(jìn)行排序還是只對(duì)當(dāng)前頁(yè)面的數(shù)據(jù)進(jìn)行排序。默認(rèn)的不指定該屬性的情況下,排序的時(shí)候只對(duì)當(dāng)前頁(yè)面數(shù)據(jù)進(jìn)行排序;如果指定sort=“l(fā)ist”的話,則可以對(duì)整個(gè)的數(shù)據(jù)list進(jìn)行排序。
?OK,其他屬性讀者有興趣或者需要的話,可以參考DiplayTag網(wǎng)站提供的manual。
?3-2 <display:column>標(biāo)簽說(shuō)明
?顧名思義,該標(biāo)簽是用來(lái)顯示表格中的一列,它只能嵌套在<display:table>標(biāo)簽中使用,顯示decorator處理后的結(jié)果,如果沒有指定decorator,則顯示property屬性指定的數(shù)據(jù)。
?代碼實(shí)例:
?<display:table name="sessionScope.InfoList" export="true" pagesize="3" requesturi="">
??????? <display:column title="ID NUM" property="label"></display:column>
??????? <display:column title="VALUE" property="value">
??????? </display:column>
??? </display:table>
?該標(biāo)簽有個(gè)特性,即如果以空元素的形式出現(xiàn),則顯示property屬性指定的數(shù)據(jù);否則,也就是不以空元素形式出現(xiàn),那么如果兩個(gè)元素中指定了數(shù)據(jù),即使property指定的數(shù)據(jù)存在,也會(huì)以兩個(gè)元素間的數(shù)據(jù)顯示為準(zhǔn)。
例如:<display:column title="VALUE" property="value"></display:column>或者<display:column title="VALUE" property="value"></display:column>將按照value屬性指定的數(shù)據(jù)進(jìn)行顯示,而<display:column title="VALUE" property="value">My Custom Value</display:column>將在每行只顯示“My Custom Value“,而不是顯示property=”value”所指定的數(shù)據(jù)。
?這個(gè)屬性可以幫助你定制自己的列顯示,后面將會(huì)提到某些實(shí)例中的使用。
?<display:column>標(biāo)簽的屬性(Attribute)說(shuō)明:</display:column></display:table></display:column>

?Property屬性:指定與該列顯示數(shù)據(jù)相關(guān)聯(lián)的property名稱,該屬性對(duì)應(yīng)該行數(shù)據(jù)bean的屬性,如果這列要顯示bean的數(shù)據(jù),column的這個(gè)屬性是必須指定的。
?如:<display:column property="paramName"></display:column>
?Title屬性:該屬性用來(lái)指定顯示列的標(biāo)題。如果不指定該屬性,默認(rèn)的使用property的名字做為該列的標(biāo)題。這也就是我們第一個(gè)例子中兩列的標(biāo)題都是LabelValueBean的屬性名的原因,我們只要為這兩列指定需要的title就可以了。
?如:<display:column title="省份" property="label"></display:column>
?Href屬性和其關(guān)聯(lián)屬性:使用href屬性動(dòng)態(tài)構(gòu)造當(dāng)前列的各行數(shù)據(jù)的超連接。使用paramId來(lái)指定附在url字符串后面的參數(shù)名稱,而使用paramName或者paramProperty來(lái)指定與paramId相關(guān)聯(lián)的參數(shù)值。
?如:<display:column href="preUpdateAction.do" paramproperty="userId" paramid="id">UPDATE DATA</display:column>將會(huì)生成類似于下面的url形式:
?http://XXX/youApp/preUpdateAction.do?id=132(假設(shè)該行的userId的值為132)
?Sortable屬性和headerClass屬性:DisplayTag還提供了一個(gè)很有特色的特性,那就是可以針對(duì)某一列的數(shù)據(jù)進(jìn)行排序,而這只需要指定sortable屬性為true,并指定其headerClass為sortable就可以了。
?如:<display:column property="label" sortable="true" headerclass="sortable">
??? </display:column>
?這樣,就可以通過點(diǎn)擊該列的標(biāo)題來(lái)排序該列的數(shù)據(jù)了。
?其中,sortable屬性接受boolean值為合法屬性值,而headerClass為string型的合法值。
?其他屬性說(shuō)明這里略去,請(qǐng)參考相關(guān)文檔。

?3-3 <display:setproperty>標(biāo)簽說(shuō)明
?使用這個(gè)標(biāo)簽可以對(duì)DisplayTag顯示的表格的屬性進(jìn)行設(shè)置,但因?yàn)橹荒茏饔糜趩蝹€(gè)的表格,所以,作用有限,一般用來(lái)處理個(gè)別的情況。該標(biāo)簽同樣需要嵌套于<display:table>標(biāo)簽內(nèi)使用。它只有兩個(gè)屬性:name和value。通過為指定的name設(shè)置相應(yīng)的value來(lái)更改displaytag的默認(rèn)屬性。
如:<display:setproperty name="basic.msg.empty_list" value="無(wú)記錄可供顯示"></display:setproperty>或者<display:setproperty name="basic.msg.empty_list">無(wú)記錄可供顯示</display:setproperty>
這些屬性的name可以參考DisplayTag網(wǎng)站提供的TagReference文檔,具體網(wǎng)址是
http://displaytag.sourceforge.net/tagreference-displaytag-12.html。
?3-4 <display:caption>標(biāo)簽說(shuō)明
?這個(gè)標(biāo)簽比較簡(jiǎn)單,就是完成html里面的標(biāo)簽所完成的功能??梢栽诒砀竦纳戏斤@示指定的自定義表頭。
?代碼實(shí)例:
?<display:caption>
???????
??????????? Caption of The Table
???????

</display:caption>
?效果如下所示:
[img]/user11/darrenwang/upload/20046317343872597.gif[/img]
3-5 <display:footer>標(biāo)簽說(shuō)明
?與<display:caption>標(biāo)簽相對(duì)應(yīng),這個(gè)標(biāo)簽用來(lái)顯示表格的表尾。按照其實(shí)現(xiàn)的需求,該標(biāo)簽應(yīng)該像在上圖中那樣在表尾顯示,但是上圖是在Jbuilder中抓下來(lái)的,顯示正常,但是,如果在IE中,表尾文字將會(huì)在表頭之上(我想,這應(yīng)該是IE的問題)。如下圖所示:
[img]/user11/darrenwang/upload/20046317354615797.gif[/img]
至此,DisplayTag的五種標(biāo)簽就簡(jiǎn)單介紹完了,但是我們不想就此打住,下面,筆者將對(duì)DisplayTag的某些特性做進(jìn)一步的探索。</display:caption></display:footer></display:caption></display:table></display:setproperty>

[b]【displaytag高級(jí)特性】[/b]
有些時(shí)候,Collection中提供的數(shù)據(jù)或許不是我們想要的形式,比如,貨幣字段,在DataObject中或許只是存為int或者long甚至BigDecimal等形式,但是,顯示的時(shí)候,我們不想以這種形式顯示在頁(yè)面上,這個(gè)時(shí)候,我們就需要借助DisplayTag提供的Decorator特性。Decorator可以幫助我們?cè)陲@示數(shù)據(jù)之前對(duì)相應(yīng)的數(shù)據(jù)進(jìn)行格式化,然后再返回格式化后的結(jié)果進(jìn)行顯示。下面我們就DisplayTag提供的column decorator和table decorator 進(jìn)行簡(jiǎn)單的剖析并列舉其使用場(chǎng)合。
4-1 colunm decorator闡述
?Column Decorator所能實(shí)現(xiàn)的格式化功能只能針對(duì)單一的列進(jìn)行,他所適用的情況包括對(duì)貨幣,時(shí)間,數(shù)字等類型進(jìn)行統(tǒng)一格式化的情況,這樣,就可以在應(yīng)用中的所有表格中都能夠使用該decorator進(jìn)行格式化,大大提高了其可服用度。缺點(diǎn)嘛,從筆者個(gè)人的使用情況來(lái)看,column decorator不能對(duì)處于同一行的其他列的數(shù)據(jù)進(jìn)行引用,對(duì)某些情況下的格式化很不方便,但這不屬于Displaytag的問題,這些可以通過稍后將提到的Table decorator來(lái)實(shí)現(xiàn)。
?要使用column decorator,需要實(shí)現(xiàn)DisplayTag庫(kù)中的ColumnDecorator接口,這個(gè)接口位于org.displaytag.decorator.ColumnDecorator。同時(shí),實(shí)現(xiàn)靜態(tài)的decorate()方法。在這個(gè)方法中對(duì)要格式化列的數(shù)據(jù)進(jìn)行格式化操作?;蛟S這么說(shuō)有些抽象,讓我們來(lái)看一個(gè)例子。
?這個(gè)實(shí)例其實(shí)是DisplayTag自帶的,我在這里只是進(jìn)行簡(jiǎn)單的講解。
?代碼如下:
?import java.util.Date;
import org.apache.commons.lang.time.FastDateFormat;
import org.displaytag.decorator.ColumnDecorator;

public class LongDateWrapper
??? implements ColumnDecorator
{

??? private FastDateFormat dateFormat;

??? public LongDateWrapper()
??? {
??????? dateFormat = FastDateFormat.getInstance("MM/dd/yyyy HH:mm:ss");
??? }

??? public final String decorate(Object columnValue)
??? {
??????? Date date = (Date)columnValue;
??????? return dateFormat.format(date);
??? }
}
該實(shí)例要對(duì)當(dāng)前列的Date對(duì)象進(jìn)行某種形式的格式化操作(實(shí)際上是MM/dd/yyyy HH:mm:ss的形式,這可以在code中看到),所以他在格式化方法decorate中提取該列的Date對(duì)象,并進(jìn)行cast,然后使用commons-lang包中的FastDateFormat類對(duì)該對(duì)象進(jìn)行格式化后返回String形式的結(jié)果。
?與上原理所述,只要實(shí)現(xiàn)一個(gè)implemets了ColumnDecorator的類,并override自己相應(yīng)的decorate()方法就可以了。另外,為了提高性能,最好是將初始化的操作放到該類的構(gòu)造函數(shù)中,否則,當(dāng)iterate數(shù)據(jù)記錄的時(shí)候還要初始化資源,那性能可想而知不會(huì)高到那里去的。
?4-2 table decorator闡述
?Table Decorator筆者使用的更多一些,他可以對(duì)整個(gè)表格的輸出在顯示之前進(jìn)行格式化。表格在顯示的時(shí)候,每次iterate到一行記錄的時(shí)候,都會(huì)首先查詢decorator中是否實(shí)現(xiàn)了對(duì)各個(gè)列的數(shù)據(jù)對(duì)象進(jìn)行格式化的方法,如果有,則調(diào)用這些方法對(duì)當(dāng)前數(shù)據(jù)對(duì)象進(jìn)行格式化,然后返回格式化后的結(jié)果進(jìn)行顯示;否則,直接返回當(dāng)前數(shù)據(jù)對(duì)象進(jìn)行顯示。
?如果說(shuō)原始的數(shù)據(jù)對(duì)象不能夠滿足你數(shù)據(jù)顯示需要的話,table Decorator就可以幫你忙。上面已經(jīng)談到過column Decorator遇到的問題:不能引用同行的數(shù)據(jù)對(duì)象,而現(xiàn)在table decorator就可以,你可以結(jié)合同一行的數(shù)據(jù)對(duì)當(dāng)前行進(jìn)行格式化,這在比如設(shè)置連接的時(shí)候要為連接設(shè)置不同的參數(shù)情況下特別有用。稍后實(shí)例將會(huì)有說(shuō)闡明。
?要編寫Table decorator,首先需要繼承DisplayTag包中的TableDecorator類,該類的確切位置是:org.displaytag.decorator.TableDecorator。之后,因?yàn)槲覀円梢詫?duì)沒一列都能進(jìn)行格式化,所以,針對(duì)每一個(gè)要格式化的字段,只要想javabean的屬性getter方法那樣,實(shí)現(xiàn)每個(gè)字段的getter方法,并在該方法中實(shí)現(xiàn)針對(duì)該字段的格式化邏輯。
?實(shí)例代碼:
?import org.displaytag.decorator.TableDecorator;
import org.apache.commons.beanutils.*;

public class UserTableDecorator extends TableDecorator
{
??? public UserTableDecorator()
??? {
??? }
??? public String getUserId()
??? {
??????? Object obj = this.getCurrentRowObject();
??????? DynaBean row = (DynaBean)obj;
??????? String deco = ""+row.get("userId");
??????? return deco;
??? }
}
?這是筆者后面實(shí)例中將會(huì)用到的一個(gè)TableDecorator,他是用來(lái)實(shí)現(xiàn)表格顯示的時(shí)候能夠生成便于用戶選擇的checkbox,以便用戶可以選擇一條或者多條數(shù)據(jù)進(jìn)行刪除或者其他操作。他生成的界面類似于:
[img]/user11/darrenwang/upload/2004631737127283.gif[/img]
在這里,因?yàn)閂alueObject的UserID字段只是返回一個(gè)String型的數(shù)據(jù),這不能滿足我們要顯示checkbox的需要,所以,按照J(rèn)avabean的getter方法形式,我們實(shí)現(xiàn)了public String getUserId()方法,并在這個(gè)方法中實(shí)現(xiàn)了將數(shù)據(jù)格式化為checkbox相關(guān)形式的操作。其中,只要取得了當(dāng)前行的數(shù)據(jù)對(duì)象并cast成正確的對(duì)象類型,就可以調(diào)用該對(duì)象的方法使用同一行的其他列數(shù)據(jù)了。
??? 4-3 其他,像表格的嵌套和表格的排序,表格的總結(jié)行的添加等功能,希望讀者能夠自己研讀DisplayTag Samples的代碼。
?至此,有關(guān)Displaytag的decorator特性就算說(shuō)完了。到現(xiàn)在為止,我們只是說(shuō)了一些原理和簡(jiǎn)單的代碼實(shí)例,為了給大家一個(gè)應(yīng)用的意識(shí),下面筆者就自己實(shí)現(xiàn)的一個(gè)簡(jiǎn)單工程做一個(gè)簡(jiǎn)單的描述,以期給大家一個(gè)更深的認(rèn)識(shí)。
------------------------------------------------------------------------

[b]DisplayTag Tutorial by DarrenWang[/b]
?????????????????? CopyRight June,2004
?????????????????? By DarrenWang,All Rights Reserved!
------------------------------------------------------
話接上回:

[b]【table運(yùn)行實(shí)例】[/b]

筆者原來(lái)做過幾個(gè)有關(guān)Displaytag的demo,但是都只是研習(xí)用的,為了給出一個(gè)實(shí)際情況下的例子,筆者就前陣子的一個(gè)面試題給出一個(gè)用戶管理流程的實(shí)現(xiàn)。當(dāng)時(shí)要求用Hibernate跟persistence層交互,因?yàn)檫@跟我們的主題沒有多大關(guān)系,所以,我們采用將數(shù)據(jù)以DynaBean的形式放入session來(lái)模擬數(shù)據(jù)的處理。
5-1運(yùn)行環(huán)境說(shuō)明
?IDE:Jbuilder X
?AppServer:Tomcat 4.0.6
?Framework:Struts1.1(with Tiles and Validator)
?Other: DisplayTag(這個(gè)當(dāng)然要有了,^_^),commons-beanutils,commons-lang2
?另外在進(jìn)行實(shí)例的進(jìn)一步剖析之前,建議使用以下的目錄結(jié)構(gòu):
[img]/user11/darrenwang/upload/20046321185982226.gif[/img]
按照配置部分所述,建議將壓縮包中的displaytag.war中的css目錄和img目錄都copy到當(dāng)前的web應(yīng)用根目錄下面。另外,為所有的JavaScript文件建立單獨(dú)的目錄js(這里存放dTree的js類庫(kù)),以便統(tǒng)一管理。因?yàn)槲覀兪褂玫搅薚iles,所以,拷貝整個(gè)Struts的Tiles應(yīng)用中的layouts目錄到當(dāng)前應(yīng)用目錄。剩下的就是為工程用到的圖片新建project-image目錄,該名稱可以變化,不要與img重復(fù)就可以。
?另外一個(gè)目錄事init目錄,筆者用來(lái)存放init.jsp文件以及其他初始化作用的文件,init.jsp文件的內(nèi)容將在后面提到。
?最后,為每一個(gè)應(yīng)用模塊建立他們自己的目錄,如memo和users,這些目錄下面再根據(jù)需要細(xì)分其他子目錄。
?Ok,環(huán)境就說(shuō)到這里。
?5-2實(shí)例講解
?該實(shí)例其實(shí)很簡(jiǎn)單,說(shuō)白了也就是一個(gè)CRUD操作,就是管理員可以實(shí)現(xiàn)對(duì)用戶的創(chuàng)建,讀取,更新和刪除等功能。不過,MIS要處理的不就是這這些嘛,呵呵,ok,let’s begin。
?因?yàn)槭裁炊颊f(shuō)的話太過繁瑣,所以,筆者僅就整個(gè)流程和個(gè)別需要說(shuō)明的內(nèi)容做簡(jiǎn)單的描述,如果有興趣讀代碼的話,可以email索取。
?在管理員進(jìn)入管理頁(yè)面之前,我們需要一個(gè)Action來(lái)讀取用戶列表,以便管理員處理,所以,筆者定義了PreUserListAction,在這里,筆者構(gòu)造了兩個(gè)DynaBean并存入樣例數(shù)據(jù),然后轉(zhuǎn)入管理員頁(yè)面。
?PreUserListAction的execute()方法的代碼片斷:
?HttpSession session = httpServletRequest.getSession();
??????? List userList = new ArrayList();
??????? DynaProperty[] props = new DynaProperty[]{new DynaProperty("userId",String.class),new DynaProperty("type",String.class),new DynaProperty("userName",String.class),new DynaProperty("passWord",String.class)};
??????? BasicDynaClass userClass = new BasicDynaClass("user",null,props);
??????? try{
??????????? DynaBean user1 = userClass.newInstance();
??????????? user1.set("userId","00001");
??????????? user1.set("type","admin");
??????????? user1.set("userName","Darren");
??????????? user1.set("passWord","112345");
??????????? userList.add(user1);

??????????? DynaBean user2 = userClass.newInstance();
??????????? user2.set("userId","00050");
??????????? user2.set("type","plain");
??????????? user2.set("userName","susan");
??????????? user2.set("passWord","2125465");
??????????? userList.add(user2);

??????? }catch(Exception e)
??????? {
??????????? e.printStackTrace();
??????? }
??????? session.setAttribute("UserList",userList);
??????? return actionMapping.findForward("suc");
?在轉(zhuǎn)入用戶管理頁(yè)面后,管理員可以看到類似于下面的管理界面:
[img]/user11/darrenwang/upload/20046321194589246.gif[/img]
這個(gè)頁(yè)面就是使用DisplayTag生成的表格,至于其生成,上面說(shuō)的已經(jīng)足夠了,唯一需要說(shuō)明的一點(diǎn)就是最后一列,他同樣是通過<display:column>構(gòu)造的,不同之處在于:
<display:column href="preUpdateAction.do" paramproperty="userId" paramid="userId">
??????????? UPDATE
</display:column>
?這一列使用了上面的href屬性,指定該行記錄更新的URL,唯一可能遇到的問題是,指定其為Struts的action 的時(shí)候,要使用以上的*.do形式,而以/preUpdateAction.do或者/preUpdateAction的形式指定的話,都不能找到處理的地址(雖然Struts的 <html:link> 可以)。
?在這里,管理員可以選取要?jiǎng)h除的用戶,點(diǎn)擊“刪除用戶記錄”按鈕刪除用戶;或者要更新某個(gè)用戶的信息的時(shí)候,點(diǎn)擊最后一列的UPDATE連接,進(jìn)去更新頁(yè)面修改用戶信息;又或者點(diǎn)擊“AddUser”連接進(jìn)入用戶添加頁(yè)面來(lái)添加用戶。其中,用戶添加頁(yè)面和更新頁(yè)面很相象,唯一的不同是前者表單中沒有任何信息,后者則表單中已經(jīng)包含了用戶原來(lái)的信息。下面是用戶添加頁(yè)面的樣子:
[img]/user11/darrenwang/upload/20046321202050447.gif[/img]
最后,所有的這些刪除,新建和更新用戶信息的功能實(shí)現(xiàn)筆者都在org.apache.struts.actions.DispatchAction的子類UserOptDispatchAction中實(shí)現(xiàn)了,因?yàn)榇a太長(zhǎng),這里僅貼出代碼實(shí)現(xiàn)的框架吧。[img]/user11/darrenwang/upload/2004632121372760.gif[/img]
至此,整個(gè)流程就算完成了,是不是很簡(jiǎn)單?!呵呵,本來(lái)就簡(jiǎn)單嘛,還用你說(shuō)。hoho
????? 哦,對(duì)了,忘了說(shuō)了,在每一個(gè)使用DisplayTag的頁(yè)面,我們都會(huì)包含一個(gè)init.jsp頁(yè)面,具體代碼是在頁(yè)頭。Init.jsp頁(yè)面導(dǎo)入已經(jīng)在web.xml注冊(cè)的各種taglib,以供頁(yè)面使用。他的內(nèi)容是:
?







?當(dāng)然,讀者也可以根據(jù)自己的考慮來(lái)實(shí)現(xiàn)這種形式的頁(yè)面include,以提高頁(yè)面的復(fù)用。 </html:link> </display:column>

?除了使用DisplayTag外,該應(yīng)用也使用了Tiles對(duì)這個(gè)應(yīng)用的界面風(fēng)格進(jìn)行了統(tǒng)一,并且使用validator框架進(jìn)行驗(yàn)證等,但這些不是這里的重點(diǎn),所以不作贅述。

[b]【可能遇到的問題】[/b]

這是筆者在使用displaytag的時(shí)候遇到的或者是想到的一些問題,作為tips,列于下,以供參考。
?6-1 進(jìn)行分頁(yè)顯示的時(shí)候,雖然第一頁(yè)可以正常顯示,而且分頁(yè)條目也顯示出來(lái),但是,點(diǎn)擊連接的時(shí)候不能顯示下其他數(shù)據(jù),可能顯示找不到該頁(yè)面等錯(cuò)誤。
?這種情況多是因?yàn)闆]有在意數(shù)據(jù)存放的scope造成的,也是筆者剛開始使用的時(shí)候碰到的第一個(gè)比較傷腦筋的問題,其實(shí)當(dāng)時(shí)只是為了試驗(yàn),圖方便而且也沒過多在意,所有的數(shù)據(jù)都放在requestScope中了,而實(shí)際上,像分頁(yè)這種情況,最合適的是應(yīng)該將數(shù)據(jù)放入sessionScope中。否則,就會(huì)出現(xiàn)上面的情況。
?解決方法:將數(shù)據(jù)collection放入sessionScope中,指定<display:table>的name屬性為sessionScope.yourInfoCollection的形式。
?6-2 點(diǎn)擊頁(yè)面連接或者分頁(yè)連接的時(shí)候,頁(yè)面跳轉(zhuǎn)到開始頁(yè)面,或者跳轉(zhuǎn)的頁(yè)面根本不是應(yīng)該顯示的頁(yè)面,甚至使你有些莫名其妙。
?這種情況多是因?yàn)槟闶褂昧税琲nclude機(jī)制的頁(yè)面,包括Struts提供的Tiles功能。像這種情況下,應(yīng)該為這些連接指定確定的連接,而不是默認(rèn)的。或許解釋的有些使你丈二和尚摸不著頭腦了,別急,看下面的解決方法。
?解決方法:通過為<display:table>標(biāo)簽添加默認(rèn)情況下不指定的requestURI屬性,如果說(shuō)你也不確定確切的連接的話,可以只這樣寫:requestURI=””, and that‘s enough。想要了解更清楚一些,看DisplayTag的FAQ,第三條就是。
?6-3這種情況應(yīng)該算特殊情況,如果你不用Jbuilder的話,應(yīng)該不會(huì)遇到,該情況跟6-2的情況有些類似,但是Jbuilder瀏覽器的問題,就是點(diǎn)擊分頁(yè)連接的時(shí)候,頁(yè)面跳到登陸的頁(yè)面。這不是displaytag的問題,即使你加了requestURI=””也是一樣,應(yīng)該是Jbuilder瀏覽器的問題,所以,建議在IE或者netscape下測(cè)試。</display:table></display:table>

[b]【結(jié)束語(yǔ)】[/b]

這篇文章定位為一篇tutorial,意在于與大家共享。沒有多少高深的理論,筆者也盡量將問題說(shuō)的簡(jiǎn)單,盡量的step by step。如果大家通過Google或者其他途徑了解并閱讀了他,并且覺得好的話,希望給一些鼓勵(lì)的話,或者發(fā)張電子賀卡之類也可以,以資鼓勵(lì)。
?另外,我要感謝我現(xiàn)在的公司-江蘇國(guó)光信息產(chǎn)業(yè)股份有限公司,雖然沒有多少項(xiàng)目給我做,但是卻給了我更多的時(shí)間,讓我能夠?qū)戇@么些技術(shù)文章,與大家共享。

總結(jié)

以上是生活随笔為你收集整理的displayTag的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

久久久久久国产精品亚洲78 | 亚洲天堂网在线视频观看 | 日韩在线视频免费观看 | 国产精品高清一区二区三区 | 久久夜夜爽 | 日韩有码中文字幕在线 | 美女黄频网站 | 91精品国产99久久久久久久 | 日韩一级成人av | 2021国产视频 | 91视频传媒 | 国产精品国产三级国产aⅴ9色 | 涩涩网站在线播放 | 99精品免费在线 | 91丨九色丨蝌蚪丨对白 | 国产一区二区久久精品 | www色片| 中文字幕一区二区三区在线播放 | 久久精品专区 | 最近中文字幕高清字幕在线视频 | 超级碰碰碰免费视频 | 99热精品在线 | 激情久久影院 | 伊人宗合| 韩国精品一区二区三区六区色诱 | 九七人人干 | 日韩欧美高清在线观看 | 久久国产精品一二三区 | 97在线观看免费高清 | 国产999视频在线观看 | 亚洲涩涩色 | 99在线观看精品 | 久色网 | 在线免费性生活片 | 美女免费视频观看网站 | 日夜夜精品视频 | 高清一区二区三区 | 国产高清日韩 | 黄色av电影免费观看 | 精壮的侍卫呻吟h | 久久久久久国产精品美女 | 欧美精品一区二区三区四区在线 | 日日干美女 | 成人性生交大片免费观看网站 | 欧美激情视频在线观看免费 | a级一a一级在线观看 | 午夜久久影视 | 国产人免费人成免费视频 | 久久综合综合久久综合 | 日韩一级电影网站 | 精品久久毛片 | 久久精品日产第一区二区三区乱码 | 色综合久久精品 | 久久久久观看 | 97成人在线观看 | 黄色av三级在线 | 久草免费电影 | 久久伦理电影 | 亚洲成人av在线播放 | 国产精品久久久久一区二区国产 | 中文字幕在线看视频国产中文版 | 99久热在线精品视频观看 | 久久久毛片 | 成年人视频在线免费 | 丁香五月网久久综合 | 97人人模人人爽人人喊中文字 | 国产高清永久免费 | 亚洲成a人片77777kkkk1在线观看 | 国产福利91精品 | 成人影音av | 久久6精品 | 973理论片235影院9 | 色亚洲激情 | 久久久久伦理电影 | 午夜aaaa| 欧美一级淫片videoshd | 天天干天天弄 | 色婷婷综合久久久中文字幕 | 国产一区精品在线 | 色在线观看网站 | 激情电影影院 | 欧美日韩久久不卡 | 国产免费又爽又刺激在线观看 | 色视频成人在线观看免 | 日本一区二区三区视频在线播放 | 国产一线二线三线性视频 | 一区二区三区国产精品 | 色婷婷综合久色 | 久久毛片网站 | 久久久噜噜噜久久久 | 香蕉影院在线播放 | 黄色av高清 | 久久这里精品视频 | 高清不卡一区二区三区 | 欧美一区二区三区不卡 | 97超碰中文字幕 | 日韩久久精品一区二区 | 久久国产精品免费视频 | 中文字幕在线观看三区 | 免费观看一区 | 婷婷天天色| 成人免费在线视频观看 | 久久97超碰| 国产无限资源在线观看 | 国产精品美 | 日本在线观看一区 | 亚洲欧美日韩一区二区三区在线观看 | 久久国产经典视频 | 一本到视频在线观看 | 免费看的黄色小视频 | 久久字幕精品一区 | 最新中文在线视频 | 国产专区视频在线观看 | av片在线观看 | 不卡av在线免费观看 | 免费看成人片 | 国精产品999国精产 久久久久 | 天天躁天天操 | 国产精品18久久久久久久久久久久 | 国产免费又爽又刺激在线观看 | 91九色综合 | 天天爱天天操 | 亚洲免费av在线播放 | 三级黄在线 | 999成人精品 | 国产一级免费观看视频 | 狠狠干 狠狠操 | 91九色网站 | 天堂久色 | 在线观看免费av片 | 99视频+国产日韩欧美 | 韩国一区在线 | 96精品视频| 黄色a一级片 | a v在线观看 | 高清不卡一区二区三区 | 美国av大片 | 99re久久资源最新地址 | 亚洲区视频在线 | 五月天中文字幕mv在线 | 精品国产成人 | 久久国产精品久久精品国产演员表 | 国产精品免费在线视频 | 国产精品久久久久久久久久久久午夜 | 五月情婷婷| 99久久婷婷国产精品综合 | 玖玖在线资源 | 日韩久久精品 | 久久久久国产精品视频 | 91视频啊啊啊 | 成人黄性视频 | 天天操天天干天天爱 | 黄色成人在线观看 | 黄色成人av | av大全免费在线观看 | 国产精品毛片一区二区 | 日韩av图片 | 久久怡红院| 欧美亚洲免费在线一区 | 99国产在线 | 国产精品系列在线观看 | 超碰在线97国产 | 亚洲精品综合久久 | 国产精品网址在线观看 | 久久免费在线观看 | av成人免费在线看 | 在线免费中文字幕 | 人人看人人爱 | 四虎影视成人永久免费观看视频 | 麻花豆传媒mv在线观看网站 | 婷婷.com| 亚洲精品女 | 国产成人黄色 | www.夜夜干.com| 色婷婷综合久久久久 | 日韩在线一区二区免费 | 99精品国产99久久久久久福利 | 国产亚洲精品久久久久久无几年桃 | 国产 欧美 日产久久 | 国产91精品在线播放 | 日韩羞羞| 日韩黄色av网站 | 久久艹精品| 国产精品久久久久久超碰 | 狠狠色丁香九九婷婷综合五月 | 九九99| h网站免费在线观看 | 久在线观看视频 | 亚洲国产精品电影在线观看 | 欧美巨大荫蒂茸毛毛人妖 | 在线导航av | 天天干夜夜夜 | 色综合中文综合网 | 国产日韩在线视频 | 蜜桃视频成人在线观看 | 欧美一区二区三区激情视频 | 国产精久久久久久久 | 亚洲成人国产 | 中文在线8新资源库 | 操操碰 | 国产精品免费视频网站 | 国产精品视频地址 | www五月天 | 久久精品8 | 青青草国产精品 | 激情视频免费观看 | 精品在线你懂的 | 在线日韩一区 | 国产精品一区二区在线 | 91超国产 | 91完整版在线观看 | 五月天激情视频在线观看 | 久热免费在线观看 | 午夜精品久久久久久久久久久久久久 | 在线av资源 | 黄在线免费观看 | 高清不卡一区二区在线 | 国产一区成人在线 | 久久精品专区 | 91麻豆精品国产91久久久久 | 欧美最新另类人妖 | 亚洲精品在线电影 | 热久久精品在线 | 亚洲男人天堂2018 | 欧美做受高潮电影o | 亚洲精品1区2区3区 超碰成人网 | 色婷婷骚婷婷 | 亚洲精品色| 一级黄色片在线免费看 | 国产精品美女久久久久久网站 | 久久久久久久久艹 | 国产成人久久av免费高清密臂 | 人人看人人做人人澡 | 亚洲精品在线免费观看视频 | 亚洲国产精品小视频 | 中文区中文字幕免费看 | 天天爽天天爽 | 91在线亚洲| 97超碰人人澡人人爱学生 | 五月天六月婷婷 | 免费视频久久 | www.久久久久 | 久久久麻豆 | 国产第页 | 日本中文字幕在线免费观看 | 国产精品女同一区二区三区久久夜 | 天天操天天拍 | 日日干天天爽 | 日韩久久午夜一级啪啪 | 日韩午夜电影网 | 久久精品国产99国产 | 香蕉91视频 | 手机在线永久免费观看av片 | 国产不卡精品 | 亚洲欧美国产精品 | 五月婷视频| 亚洲视频电影在线 | 日韩.com| 国产亚洲视频在线观看 | 久久99爱视频 | 免费网站黄 | 国产一区二区久久精品 | 456免费视频| 国产精品伦一区二区三区视频 | 国产精品久久久区三区天天噜 | 成人小视频在线观看免费 | 亚洲在线网址 | 3d黄动漫免费看 | 五月天色网站 | 亚洲开心激情 | 国产99免费 | 国产一级片免费观看 | 亚洲自拍偷拍色图 | 国产精品毛片久久蜜 | 欧美日韩中文视频 | 亚洲丝袜中文 | 人人澡人 | 97视频在线看 | 一区二区三区久久 | 亚洲欧洲国产日韩精品 | 免费精品国产va自在自线 | 狠狠干天天 | 人人干天天干 | 国产视频中文字幕在线观看 | 91黄在线看 | 激情综合网在线观看 | 在线国产中文字幕 | 亚洲成av人片在线观看香蕉 | 99精品免费 | 中字幕视频在线永久在线观看免费 | 在线观看片 | 超碰人人av | 久久久久久久电影 | 久久艹精品 | 激情开心| 日韩成人欧美 | 免费观看国产精品视频 | av免费看电影 | 久久99国产精品 | 狠狠色狠狠色综合系列 | 天堂在线一区二区三区 | 成人禁用看黄a在线 | 国产精品第7页 | 美女网站在线观看 | 国产精品久久久久久久久久了 | 久久久久久免费视频 | 日韩av网页 | 成人小视频在线观看免费 | 日韩成人在线免费观看 | 黄色三级免费片 | 中文在线 | 国产精品美女视频 | 久久久国产精品成人免费 | 天天亚洲 | 六月丁香激情综合色啪小说 | 国产婷婷精品 | 国产精品资源 | 久久精品99国产精品 | 在线观看免费高清视频大全追剧 | 韩国av一区二区三区 | 免费中文字幕在线观看 | 狠狠狠狠干 | 日韩黄色影院 | 免费久久网站 | 婷婷网址 | 久久综合在线 | 色欧美成人精品a∨在线观看 | 国产小视频福利在线 | 亚洲国内在线 | 五月婷婷在线视频观看 | 日韩一二三区不卡 | 18pao国产成视频永久免费 | 超碰在线人人爱 | 国精产品永久999 | 免费视频91| 国精产品999国精产 久久久久 | 99久免费精品视频在线观看 | 日本成址在线观看 | 国产一级大片免费看 | 99在线精品视频观看 | 成人免费xxx在线观看 | 91福利在线导航 | 伊人资源站 | 热久久在线视频 | 91麻豆精品国产91 | 日韩欧美在线观看一区二区三区 | 最新中文字幕在线资源 | 97免费在线观看视频 | 91完整版| 国产成人一级电影 | 免费中午字幕无吗 | 探花视频在线观看免费 | 欧美一二三在线 | 久久影院一区 | 亚洲欧洲日韩在线观看 | 欧美va在线观看 | free,性欧美 九九交易行官网 | 欧美精品在线观看一区 | 国内精品视频久久 | 涩涩色亚洲一区 | 91黄色小网站 | 日韩欧美网址 | 国产又粗又硬又长又爽的视频 | 欧美色图东方 | 麻豆免费看片 | 中文字幕av专区 | 9ⅰ精品久久久久久久久中文字幕 | 丝袜制服综合网 | 日本黄区免费视频观看 | 又污又黄的网站 | 一区二区视频在线看 | 91av小视频| 91网免费观看 | 亚洲欧洲精品久久 | 欧美大片在线看免费观看 | 97在线精品| 国色天香在线 | 在线观看视频福利 | 五月天丁香视频 | 久久免费福利视频 | 日日夜夜网 | 成人小视频在线 | 欧美日韩高清国产 | 日韩精品一区二区三区第95 | 激情网站五月天 | 69av网| 色偷偷人人澡久久超碰69 | 亚洲激情| 在线视频观看成人 | 国产亚洲一区 | 最新av在线播放 | 日韩字幕在线观看 | 亚洲欧洲精品一区二区精品久久久 | 国产成人av网站 | 日韩高清免费无专码区 | 国产亚洲精品久 | 中文字幕在线播放日韩 | 色吊丝在线永久观看最新版本 | www.亚洲精品视频 | 久久系列 | 国产亚洲精品中文字幕 | 久久精品视频18 | 国产99久久九九精品免费 | 91精品免费在线视频 | 久久视频免费在线 | 色婷婷国产在线 | 狠狠色狠狠色 | 日韩综合一区二区三区 | 国产香蕉97碰碰碰视频在线观看 | 久久资源在线 | 国产精品青青 | 国产在线免费观看 | 91精品国产高清自在线观看 | 日韩欧美在线影院 | 国产视频在线观看免费 | a级国产乱理伦片在线观看 亚洲3级 | 亚洲精品456在线播放第一页 | 久久免费激情视频 | 蜜臀av在线一区二区三区 | 精品99在线观看 | 久久精品久久久久久久 | 国产中文字幕网 | se婷婷| 97超碰资源网 | 色婷婷导航| 欧美日韩精品影院 | 久久婷婷丁香 | 五月激情站 | 青青草国产精品视频 | 久久不射电影院 | 亚洲国产日韩一区 | 综合中文字幕 | 亚洲国产片 | 五月综合激情婷婷 | 99精品一区 | 国产亚洲免费观看 | 欧美精品在线观看免费 | 日本特黄一级片 | 久久婷婷激情 | a级成人毛片| 波多野结衣视频一区二区三区 | 亚洲精品av在线 | 午夜久久 | 日日夜色| 成人一级免费电影 | 色婷婷骚婷婷 | www.久久婷婷 | 88av网站 | 99久久99精品 | 美女久久一区 | 国产高清综合 | 亚洲综合激情网 | 久久99精品波多结衣一区 | 麻豆视频免费播放 | 三级黄色在线观看 | 成人亚洲免费 | 国产精品久久久久久久久久久免费看 | 日韩字幕在线 | 国产黑丝袜在线 | 欧美日韩电影在线播放 | 国产高清视频免费 | 久久草网| 国产丝袜 | av短片在线观看 | 免费网址在线播放 | 丁香花在线视频观看免费 | 九色视频网址 | 香蕉97视频观看在线观看 | 正在播放国产91 | 五月婷社区 | 久久av伊人 | av超碰在线 | 欧美日韩国产精品爽爽 | 在线黄色免费 | 日日干干 | 精品自拍网 | 蜜臀aⅴ国产精品久久久国产 | 黄色中文字幕 | 91桃色免费视频 | 96精品在线 | 亚洲精品久久久久中文字幕二区 | 中文字幕人成乱码在线观看 | 久久久久久毛片 | 成人黄色国产 | 国产精品久久久久久久99 | 久操视频在线播放 | 国产精品 中文字幕 亚洲 欧美 | 99精品国产一区二区三区麻豆 | 夜夜躁狠狠躁日日躁视频黑人 | 成人免费观看电影 | 天天色天天操天天爽 | 亚洲日本成人 | 日韩精品中文字幕av | 天天色天天骑天天射 | 国产色小视频 | 午夜色婷婷 | 国产美女精品在线 | 色射爱| 在线观看免费黄色 | 免费在线看成人av | 亚州精品成人 | 精品亚洲国产视频 | 亚洲成aⅴ人片久久青草影院 | 一区二区三区日韩视频在线观看 | 丁香婷婷激情网 | 国产高清在线精品 | 99国产一区二区三精品乱码 | 99精品国产福利在线观看免费 | 亚洲精品在线观看视频 | 96在线| 免费的成人av | 在线a视频| 国产精品久久久久久久久久三级 | 久久1电影院| 久久大香线蕉app | 国产精品一区二区三区久久 | 成人在线观看影院 | 久久国产精品偷 | 久久av伊人| av综合av | 久久久久久伊人 | 四川bbb搡bbb爽爽视频 | 久久狠狠一本精品综合网 | 欧美在线视频日韩 | 99久久99久久精品 | 精品主播网红福利资源观看 | 亚洲欧美日韩一区二区三区在线观看 | 欧美一二区在线 | 欧美一级在线看 | 日韩在线不卡视频 | 91av欧美| 欧美 亚洲 另类 激情 另类 | 免费a视频在线观看 | 国产精品av免费在线观看 | 在线观看视频黄色 | 在线观看www视频 | 手机av电影在线观看 | 国产99自拍 | 亚洲高清视频在线 | 午夜久久福利视频 | .国产精品成人自产拍在线观看6 | 黄色三级久久 | 国产精品免费一区二区三区在线观看 | 人人爽人人爽人人片 | 亚洲精品mv在线观看 | 国产在线视频一区二区 | 亚洲乱码精品久久久 | 久久超碰在线 | 国产成人精品在线播放 | 亚洲国产精品电影 | 久久不射影院 | 中文av在线播放 | 日韩一级黄色av | 九七视频在线观看 | 亚洲精品五月 | 日韩网站免费观看 | 国产a级片免费观看 | 一级欧美一级日韩 | 婷婷激情综合网 | 在线观看中文字幕网站 | 国产精品麻豆果冻传媒在线播放 | 黄色激情网址 | 日日夜夜噜 | 精品国产乱码一区二区三区在线 | 亚洲黄色片一级 | 国产精品入口66mio女同 | 日韩专区av | 国产成人一区二 | 欧美va天堂va视频va在线 | 国产日韩精品在线 | 久久久久久久av | 色视频一区 | 最近中文字幕国语免费高清6 | 亚洲精品2区 | 久久大香线蕉app | 91亚洲狠狠婷婷综合久久久 | 久久综合国产伦精品免费 | 欧美另类美少妇69xxxx | 亚洲一区二区精品视频 | 国产精品婷婷午夜在线观看 | 中文字幕有码在线观看 | 久久a热6 | av成年人电影 | 欧美疯狂性受xxxxx另类 | 精品视频资源站 | 色是在线视频 | 国产日韩精品欧美 | av高清免费在线 | 人人插人人看 | av免费在线看网站 | 国产九色91 | 亚洲另类久久 | 亚洲片在线资源 | 夜夜看av| 色综合久久久久综合体 | 欧美日本在线观看视频 | 国产在线视频一区二区 | 97精品国产91久久久久久 | 有没有在线观看av | 国产精品1区2区3区在线观看 | 欧美日韩国产一二 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 中文国产成人精品久久一 | 久久中文网 | 国产午夜三级一区二区三桃花影视 | 国产精品嫩草在线 | 日韩欧美在线国产 | 国产不卡网站 | 中文字幕中文中文字幕 | av电影在线免费观看 | 国产99久久九九精品免费 | 国产福利中文字幕 | 国产高清av免费在线观看 | 最近久乱中文字幕 | 97免费中文视频在线观看 | 91成人精品一区在线播放69 | 国产高清 不卡 | 欧美aa一级 | 99人成在线观看视频 | 在线电影 你懂得 | 亚州中文av| 免费看毛片网站 | 91在线文字幕| 日日干激情五月 | 国产在线美女 | 亚洲jizzjizz日本少妇 | 亚洲精品视频免费在线 | 91在线播放综合 | 国产精品婷婷午夜在线观看 | 日韩网站在线看片你懂的 | 伊人春色电影网 | 97视频总站| 久久人人精 | 国产精品视频大全 | 国产视频色 | 日韩精品在线视频免费观看 | 欧日韩在线视频 | 开心色插 | 国产色啪 | 久99精品| 91精品免费在线 | 国产精品日韩在线 | 亚洲国产精品免费 | 欧美韩国日本在线观看 | 青青河边草免费 | 国产在线专区 | 国产麻豆视频网站 | 九九九九精品 | 24小时日本在线www免费的 | 91成人天堂久久成人 | 久久好看| 中文字幕一区二区三区乱码在线 | 亚洲精品在线观看不卡 | 中文免费观看 | 天天操夜夜操天天射 | 久久久久国产视频 | 色播五月激情综合网 | 成人a级黄色片 | 4438全国亚洲精品在线观看视频 | h视频日本 | 69av久久| 国产精品久久久av久久久 | 天天干视频在线 | 日韩电影一区二区在线观看 | 狠狠狠色丁香综合久久天下网 | 五月精品 | 99久久日韩精品视频免费在线观看 | 久久免费的视频 | 色婷婷播放 | 久久在现 | 欧美日韩观看 | 天天玩天天干 | 999国产精品视频 | 日韩激情第一页 | 久久久毛片 | 日韩视频免费观看高清完整版在线 | 成在人线av | 天天摸天天干天天操天天射 | 成人国产精品一区二区 | 亚洲精品www| 日韩美女免费线视频 | 亚洲另类在线视频 | 久久久精品综合 | 欧美日韩综合在线 | 狠狠插狠狠操 | 免费看v片 | 蜜臀av在线一区二区三区 | 久久视频6 | 日韩高清二区 | 免费精品国产 | 欧美 日韩 性 | 国产色资源 | 9999精品免费视频 | 九九热在线播放 | 日本免费久久高清视频 | 视频 国产区 | 永久免费毛片 | 99re国产视频 | 免费国产亚洲视频 | 热久久免费国产视频 | 视频在线亚洲 | 久久久免费毛片 | 欧美日韩中文国产 | 久久国产色 | 久久综合九色综合久久久精品综合 | 91九色在线视频 | 最近2019中文免费高清视频观看www99 | 日韩久久久久久久久久久久 | 成人毛片一区二区三区 | 久久久精品国产一区二区 | 欧美日韩高清在线一区 | 国产精品五月天 | 精品一区三区 | 亚洲毛片久久 | 久久精品国产免费看久久精品 | 99在线视频播放 | 日本黄色片一区二区 | 久久久久久久久综合 | 国产精品一区二区久久久 | 久久久久久久久久久久久久免费看 | 色资源二区在线视频 | 91九色在线视频 | 91麻豆精品91久久久久同性 | 国产69精品久久久久久 | 日韩网站在线免费观看 | 国产成人精品久久亚洲高清不卡 | 91成人短视频在线观看 | www日韩精品 | 免费在线观看视频a | 99九九热只有国产精品 | 麻豆视频成人 | 黄色91免费观看 | 日韩一二区在线观看 | 久久亚洲专区 | 色吊丝在线永久观看最新版本 | 日韩美精品视频 | 天天插天天狠天天透 | 国产色在线,com | 成人作爱视频 | 久久一久久 | 69国产精品成人在线播放 | 黄免费在线观看 | 久草在线在线精品观看 | 69xxxx欧美| 婷婷丁香六月天 | 国产成人福利在线 | 久久视频这里有精品 | 欧亚日韩精品一区二区在线 | 91精品国产九九九久久久亚洲 | 久久久久久久18 | 午夜免费久久看 | 婷婷丁香七月 | 色婷婷av一区 | 日韩av图片 | 中文区中文字幕免费看 | 婷婷激情小说网 | 91福利视频一区 | 亚洲精品ww | 蜜桃av久久久亚洲精品 | 日日干干夜夜 | 免费人成网ww44kk44 | 99热在线观看免费 | 亚洲韩国一区二区三区 | 麻豆免费看片 | 美女网站视频色 | 777视频在线观看 | 国产一区二区三区网站 | 五月天天色 | 成人电影毛片 | 国产精品破处视频 | 字幕网资源站中文字幕 | av+在线播放在线播放 | 超碰97网站| 2018亚洲男人天堂 | 国产高清视频免费在线观看 | 9999精品| 久久福利| 欧美专区亚洲专区 | 色婷婷在线视频 | 久久综合加勒比 | 精品一区二区三区四区在线 | 成人啪啪18免费游戏链接 | 五月亚洲综合 | 国产精久久久久久妇女av | 亚洲国产天堂av | 天天操福利视频 | 91污污视频在线观看 | a级国产毛片 | 亚洲精品视频免费观看 | 最新真实国产在线视频 | 精品国产乱码一区二区三区在线 | 在线观看久草 | 深爱激情综合网 | 欧美国产三区 | 中文字幕精品三区 | 国产精品免费不卡 | 久久综合影视 | 天堂va在线高清一区 | 精品久久久久久久久久久久久久久久久久 | 中文字幕免费观看 | 国产精品久久久久久久妇 | 伊人久久婷婷 | 手机av在线免费观看 | 天天爱天天干天天爽 | 91av精品 | 成年人免费av网站 | 亚洲a资源| 久久久国产精品视频 | 久久国产高清视频 | 在线探花| 亚洲资源在线观看 | 欧美一级黄大片 | 天天躁日日躁狠狠躁av中文 | 午夜精品成人一区二区三区 | 欧美日韩中文字幕在线视频 | 国产 亚洲 欧美 在线 | 国产精品久久久久久久午夜 | 久久99久久99精品免视看婷婷 | 激情av在线播放 | 九九热只有精品 | 在线视频日韩欧美 | 亚洲五月六月 | 伊人丁香 | 亚洲欧美视频在线 | 99久久日韩精品视频免费在线观看 | 久久久久久久久久亚洲精品 | 麻豆久久久久 | a在线播放| 久久高清av | 久久免费观看少妇a级毛片 久久久久成人免费 | 久av电影| 97人人网| 欧美一级片在线免费观看 | 国产精品丝袜久久久久久久不卡 | 视频一区在线免费观看 | 免费在线成人av电影 | 婷婷伊人五月 | 久久国色夜色精品国产 | 国产精品电影一区二区 | 天天天色综合a | 日韩精品一区二区三区电影 | 九色porny真实丨国产18 | 91在线国产观看 | 国产96在线视频 | 97国产精品久久 | 在线一区观看 | 免费黄色av| 超碰av在线播放 | 天天av综合网 | 亚洲精品影视 | 日韩特黄一级欧美毛片特黄 | 在线黄网站 | 99视频免费观看 | 久久久久在线观看 | 成人全视频免费观看在线看 | 超碰成人网| 久久这里只有精品首页 | 91尤物国产尤物福利在线播放 | 在线午夜电影神马影院 | 亚洲电影黄色 | 字幕网av| 天天爱综合 | 99视频免费观看 | 免费看污的网站 | 精品综合久久 | 中文字幕在线播出 | 最新久久免费视频 | 欧美精品在线观看一区 | 欧美aaaxxxx做受视频 | 久久久久激情 | 亚洲综合激情网 | 亚洲一级二级 | 久草免费在线视频 | 99热这里有精品 | 在线影院中文字幕 | 亚洲 欧洲 国产 日本 综合 | 亚洲婷久久 | 欧美综合干 | 人人爱人人做人人爽 | 中文字幕丝袜制服 | 日本精品一区二区三区在线播放视频 | 欧美日韩一级久久久久久免费看 | 日韩视频中文 | 国产一区二区手机在线观看 | 天天爱综合| 91精品视频在线 | 成人污视频在线观看 | 亚洲天堂网在线视频 | 丝袜美腿一区 | 美女中文字幕 | 成人久久精品视频 | 国产高清免费在线播放 | 一区二区三区四区不卡 | 国产成人久久av免费高清密臂 | 91成人精品观看 | 一区在线电影 | 久久国产精品电影 | 国产成人一二三 | 日韩午夜小视频 | 91精品国产欧美一区二区成人 | 91在线日韩 | 国产一二三在线视频 | 久久久影院一区二区三区 | 国产精品中文久久久久久久 | 国产成人精品一区二区三区福利 | 国产综合片 | 2023国产精品自产拍在线观看 | 久久久久福利视频 | 亚洲在线视频网站 | 精品国产综合区久久久久久 | 高清不卡毛片 | 久草新在线 | 玖玖在线观看视频 | 啪啪午夜免费 | 中文字幕九九 | av一区二区三区在线观看 | 婷婷精品国产一区二区三区日韩 | 欧美福利视频 | 国产老妇av| 香蕉久久久久久久 | 免费福利视频导航 | 国产精品9999久久久久仙踪林 | 日韩电影精品一区 | 亚洲欧美日韩国产一区二区三区 | 天天视频色版 | 日日天天av | 96亚洲精品久久 | 久久99亚洲精品 | 伊人黄色网| 欧美黑人性爽 | 国产视频资源在线观看 | 91亚洲综合 | 黄色大片网 | 少妇bbr搡bbb搡bbb | 亚洲国产色一区 | 欧美一二三专区 | 色综合久久88色综合天天人守婷 | 狠狠色丁香久久婷婷综合_中 | 中文字幕日韩在线播放 | 黄色1级毛片| 亚洲 欧美日韩 国产 中文 | 人人超碰免费 | 亚洲视频免费在线观看 | 成人久久精品 | 视频一区二区精品 | 国产高清在线免费 | 成人国产精品免费观看 | 日韩精品视 | 伊人影院av | 91麻豆精品国产91 | 免费看的黄色小视频 | 国产免费高清视频 | 日韩aⅴ视频| 欧美日韩在线视频免费 | 国产一区二区三区高清播放 | 日本黄色免费在线观看 | 成人在线一区二区 | 成人av电影免费 | 欧美福利在线播放 | 最新av在线免费观看 | 高清久久久久久 | 国产欧美日韩精品一区二区免费 | 三级黄在线 | 国产中文字幕一区二区三区 | 中文字幕精品视频 | 水蜜桃亚洲一二三四在线 | 欧美精品在线视频 | 2017狠狠干 | 成人动漫一区二区三区 | 久久国产精品网站 | 国产一级片不卡 | 97国产在线| 精品91| 久久激情综合 | 国产成本人视频在线观看 | 久久av黄色 | 国产婷婷一区二区 | av夜夜操 | 天天天天天操 | 91天天视频 | 久久久国际精品 | 日韩专区在线观看 | 免费h精品视频在线播放 | 在线免费观看国产精品 | 国产精品第一页在线 | 久久久精品高清 | 久久九九精品 | 国产精品男女啪啪 | 久久久99精品免费观看app | 国产精品日韩欧美 | 国产日韩欧美在线影视 | 97av影院| 五月天婷婷狠狠 | 福利一区在线视频 | 国产精品久久久久久久免费大片 | 国产福利小视频在线 | 999ZYZ玖玖资源站永久 | 97色婷婷成人综合在线观看 |