日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

编程问答

MyFaces Tree2控件使用 -----From http://blog.163.com/net_wood/blog

發(fā)布時間:2024/1/17 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyFaces Tree2控件使用 -----From http://blog.163.com/net_wood/blog 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
MyFaces開源網(wǎng)站:??http://www.irian.at/myfacesexamples/home.jsf
================================================
JSF Tree2 實踐 原址:http://www.blogjava.net/steady/archive/2005/12/01/22068.aspx

通過一次小小的實踐,終于了解如何使用tomahawk中的tree2這個組件了,并且寫了小段程序,從xml中讀取樹的結(jié)構(gòu),生成一個tree,不過tree2不能直接和xml綁定是一個遺憾,那樣就會省不少事情了。記下一點心得,以供后來參考了。

?????????tree2的操作分為兩部分,一部分是在頁面中通過tag定義樣式相關(guān)的東西,一部分就是通過編程添加樹的節(jié)點,起初看了sample以后總是以為這東西有多么的復雜,其實邏輯是很簡單的,只是sample中定義了多種不同的樣式的節(jié)點,看上去很復雜而已。

下面附上我對sample簡化過的這段tag來說明一下。

<t:tree2 value="#{catalog.node}"?var="node"?>"clientside"?varNodeToggler="t"?>

????<f:facet >"folder">

????????<h:panelGroup>

????????????<f:facet >"expand">

????????????????<t:graphicImage value="images/yellow-folder-open.png"?rendered="#{t.nodeExpanded}"?border="0"/>

????????????</f:facet>

????????????<f:facet >"collapse">

????????????????<t:graphicImage value="images/yellow-folder-closed.png"?rendered="#{!t.nodeExpanded}"?border="0"/>

????????????</f:facet>

????????????<h:outputText value="#{node.description}"/>

????????</h:panelGroup>

????</f:facet>

</t:tree2>

tree2的主tag定義了tree的根節(jié)點和一些相關(guān)的參數(shù)。嵌套的那個facet定義了一種節(jié)點的樣式,包括展開與關(guān)閉時的圖片,以及顯示的文字內(nèi)容。

在程序里面,我們root TreeNodeBase = new TreeNodeBase(…)來創(chuàng)建一個root節(jié)點,然后通過root.getChildren().add(new TreeNodeBase(…))為其添加子節(jié)點,任何一個節(jié)點都可以添加任意多的子節(jié)點,通過這樣的操作,我們可以很容易的生成一個tree的結(jié)構(gòu)了,實際上,這個tree的結(jié)構(gòu)是通過遞歸從xml中讀取出來,生成一個和xml tree完全相同的結(jié)構(gòu)。

除了明白如何去用這個tree2之外的收獲就是,終于明白了如何去通過遞歸方法遍歷一個樹形結(jié)構(gòu),雖然在學校里學過遍歷的算法,也抄過例程,但從來沒有理解過是怎么一回事,終于在實踐中理解了,實踐才是軟件的根本之道。
???程序的其它部分放在附件里面了,如果有興趣了可以和我討論tree2,討論其它JSF的東西。
???http://www.blogjava.net/Files/steady/catalog.rar

先拿回來收藏了再說,等驗證后再把結(jié)果貼出來。
===========================================================================================
析Tree2(一) ?原址:http://www.blogjava.net/steady/archive/2006/01/13/27904.html

在我的?blog?中,JSF?Tree2?組件一直都是一個熱門的討論話題,為了向大家介紹更多關(guān)于Tree2的內(nèi)容,我翻譯了這篇原產(chǎn)于?Apache Myfaces?社區(qū)的介紹?Tree2?的文章,希望大家能夠?qū)?/span>?Tree2?有更深的認識。

在最后會附上一些我在使用中的體會,和大家分享,如果大家有什么想法的話,可以和我多多交流了。本人第一次翻譯文章,難免會有很多不足之處,請大家諒解,也請多多指點。

英文原作:http://www.blogjava.net/steady/archive/2006/01/12/27814.html

轉(zhuǎn)載自:http://wiki.apache.org/myfaces/Tree2

正文如下:

Tree2組件使用HTML表格將你的數(shù)據(jù)呈現(xiàn)為一個樹。這個樹是動態(tài)的:當用戶點擊它們時它們可以展開或者折疊。該組件同時支持客戶端和服務端的交互方式,在客戶端交互時使用了JavaScript。在隨后的例子中,每次用戶的點擊將產(chǎn)生一個Request / Response?周期,并在新的視圖狀態(tài)(View State)中重新呈現(xiàn)新的樹結(jié)構(gòu)。

注:在后面的例子中只有可見的(已經(jīng)展開的節(jié)點)數(shù)據(jù)被傳送到客戶端。而在第一個例子(客戶端Tree),在每個HTML Response中,整個樹都被發(fā)送到客戶端瀏覽器。樹的每個節(jié)點都包含了不少的HTML代碼(假定每個節(jié)點200個字符,這個大小將取決于你希望在節(jié)點上顯示的信息的量),這些信息將被傳送到瀏覽器,其中包括了那些不可見的節(jié)點(沒有展開的節(jié)點),因為它們的一個祖系節(jié)點被展開。如果你有一個深度有四層的樹,平均每個結(jié)點擁有四個子結(jié)點,這時候你就需要傳輸10 + 102?+ 103?+ 104?= 11 110個節(jié)點,每個節(jié)點有200個字符,這個樹總共就有2 222 000個字符,也就是2M的數(shù)據(jù)。這個例子將向用戶說明,雖然純客戶端Tree會給客戶端帶來更好的用戶體驗,但隨之而來的帶寬問題迅速的增長。純客戶端的樹適用于小型的樹,或者在Intranet及寬帶連接中使用的中型大小的樹。對于大型的樹,或者你需要照顧到一些低帶寬的用戶的需要時,(建議使用服務端,否則頁面顯式會很慢)你就需要使用服務端樹。你可以通過<t:tree2>clientSideToggle這個屬性來選擇你使用的是客戶端的樹或者服務端的樹,<t:tree2?clientSideToggle="false"?...將會使用服務端的樹,屬性值設為true將會使用客戶端的樹,默認值為true。

用法:

Backing Bean:

Tree2組件對Backing Bean中的一個TreeModel進行操作。通常情況,你只要把這個TreeModel綁定到這個組件上就可以了,就像這樣:

<t:tree2?value="#{myHandler.treeModel}"?


下面需要建立一個類MyHandler,在faces-config.xml中的managed bean配置成myHandler,在例子中這個類提供了一個方法getTreeModel()用于返回一個TreeModel用于表示你的數(shù)據(jù)。

public?class?MyHandler?{
??public?TreeModel?getTreeModel()?{
????
??}

}


TreeModel實際上是對TreeNode實例進行了一些簡單的包裝。

TreeNode是一個接口,其中和tree2相關(guān)有四個方法:

String?getType()

boolean?isLeaf()

List?getChildren()

int?getChildCount()

其它方法都沒有什么用處了,可能會在今后的版本中取消。它們要求開發(fā)者在開發(fā)backing bean中做一些并不必要的操作。

int?getChildCount()方法返回這個節(jié)點的子結(jié)點數(shù)量,這個方法了很容易的采用如下的方式實現(xiàn):

??public?final?int?getChildCount()?{
????return?getChildren().size();
??}


該方法的出現(xiàn)使得對于子結(jié)點的延遲加載變的可行。該方法的實現(xiàn)只需要返回該節(jié)點的子結(jié)點數(shù)量,而不需要返回每個子結(jié)點的實例。

boolean isLeaf()?方法在該節(jié)點沒有子節(jié)點的時候返回true。這樣,一個很直截了當?shù)膶崿F(xiàn)可以這樣:

??public?final?boolean?isLeaf()?{
????return?getChildren().isEmpty();
??}


不管你提供了什么樣的實現(xiàn),在任何時間任何情況下你都得保持getChildren().isEmpty()?==>?isLeaf()。isLeaf()方法實際上控制了節(jié)點被怎樣呈現(xiàn):是否被當做樹葉節(jié)點(不能被繼續(xù)展開)。

String getType()?方法決定了用怎樣的方式來呈現(xiàn)這個節(jié)點。在 JSF 頁面中,可以在 <t:tree2> 的Tag 中嵌套facet,JSF將會選出與 getType() 方法返回值同名的 facet 用于呈現(xiàn)。如果該節(jié)點沒有找到相符的 facet,將會導致一個錯誤,并且這個方法不會返回null。

List getChildren()?方法返回一個 List,其中包含了該節(jié)點下所有的 TreeNode,這就表示這些節(jié)點將被呈現(xiàn)為該節(jié)點下的子結(jié)點。該 List 不能包含 null,如果該 List 的大小和getChildCount()不符,將會報錯。子結(jié)點將按照它們在 List 中的順序呈現(xiàn)出來。
==================================================
JSF TREE2 例子-- JAVA類文件???[折疊]?

package cn.bizprocess.sysmanage.user.web.webtree;

import java.io.Serializable;
import java.util.Iterator;
import java.util.*;

import org.apache.myfaces.custom.tree2.TreeNodeBase;

import cn.common.exception.BizException;
import cn.common.model.bo.PubCodeBO;
import cn.common.web.BaseBackingBean;
import cn.bizprocess.sysmanage.user.ucc.ISysParameterUCC;

/**?
?* <p>Title:DictTree</p>?
?*?
?* <p>Description: 系統(tǒng)參數(shù)(數(shù)據(jù)字典)管理類</p>?
?*/
public class DictTree? extends BaseBackingBean implements Serializable? {

?private static final long serialVersionUID = 1L;
?private String _nodePath;
?private TreeNodeBase TreeNode;
?private ISysParameterUCC sysParameterUCC;
?private PubCodeBO sysParameterBO;
?
?TreeNodeBase temp2;
?
?/**
? * 獲得系統(tǒng)代碼樹
? * @return
? * @throws Exception
? */
?? ?public TreeNodeBase getBranchTree() throws BizException? {???
?? ??
??????? try? {
??????? ?sysParameterBO=sysParameterUCC.querySysParameterByParentCodeNo("-1");
???????? String parent_code_no=sysParameterBO.getCodeNo();
?????????
???????? if ((sysParameterUCC.getChildPubCodeBOs(parent_code_no)).size()>0) {
???????? ?TreeNode=new TreeNodeBase("parent",sysParameterBO.getPubCodeId().toString(),sysParameterBO.getCodeName(), false);
???????? ?TreeNode=findBranchChild_Branch(TreeNode,sysParameterBO);
???????? }
???????? else? {
???????? ?TreeNode=new TreeNodeBase("parent",sysParameterBO.getPubCodeId().toString(),sysParameterBO.getCodeName(), true);
???????? }??
??????? }
??????? catch(BizException biz) {
??????? ?this.exceptionMsg.setMainMsg(biz);
??????? }
?????? ?return TreeNode;
?? ?}
????
?? ?/**
? * 查詢子代碼
? * @param superNode
? * @param superBO
? * @return
? * @throws Exception
? */?? ?
??? public TreeNodeBase findBranchChild_Branch(TreeNodeBase superNode,PubCodeBO superBO) throws BizException {????
?? ?
??? ?try{
??? ??PubCodeBO childBO=new PubCodeBO();
??? ??List childlist=sysParameterUCC.getChildPubCodeBOs(superBO.getCodeNo());
???Iterator it =childlist.iterator();
???
????while(it.hasNext())?{
?????
????childBO=(PubCodeBO)it.next();
????
????//System.out.println("2222222222222222222----------------FFF--------------"+childBO);
????
????List ss_list=(sysParameterUCC.getChildPubCodeBOs(childBO.getCodeNo()));
????if (ss_list!=null) {
??????temp2=new TreeNodeBase("parent",childBO.getPubCodeId().toString(),childBO.getCodeName(), false);
????}
????else {
??????temp2=new TreeNodeBase("parent",childBO.getPubCodeId().toString(),childBO.getCodeName(), true);
????}????
????superNode.getChildren().add(temp2);
????
????if ((sysParameterUCC.getChildPubCodeBOs(childBO.getCodeNo()))!=null) {
?????temp2=findBranchChild_Branch(temp2,childBO);
????}?? ?
??????? ?}
??? ?}
??? ?catch(BizException biz) {
??? ??throw biz;
??? ?}
??return superNode;
??? }
?? ?
??? /**
? * @return 返回 sysParameterBO。
? */
?public PubCodeBO getSysParameterBO() {
??return sysParameterBO;
?}

?/**
? * @param sysParameterBO 要設置的 sysParameterBO。
? */
?public void setSysParameterBO(PubCodeBO sysParameterBO) {
??this.sysParameterBO = sysParameterBO;
?}
?
??? /**
? * @return 返回 sysParameterUCC。
? */
?public ISysParameterUCC getSysParameterUCC() {
??return sysParameterUCC;
?}

?/**
? * @param sysParameterUCC 要設置的 sysParameterUCC。
? */
?public void setSysParameterUCC(ISysParameterUCC sysParameterUCC) {
??this.sysParameterUCC = sysParameterUCC;
?}
????
??? public void setNodePath(String nodePath) {
?????? ?_nodePath = nodePath;
??? }

??? public String getNodePath() {
??????? return _nodePath;
??? }

?public TreeNodeBase getTreeNode() {
??return TreeNode;
?}

?public void setTreeNode(TreeNodeBase treeNode) {
??TreeNode = treeNode;
?}
}

=======================================================================

解析Tree2(二) 原址:http://www.blogjava.net/steady/archive/2006/01/13/27960.html

改變Tree中的內(nèi)容

(當展開樹的節(jié)點時,在后臺延遲加載)

在郵件列表中有很多關(guān)于這項任務的問題和討論,我(Marcel,一個 JSF 的初學者)在這里總結(jié)一下。如果你有更好的解決方案,請更新這些文字。

在這里存在的一個問題就是我要這樣把“+”圖標去掉:

·?????????<t:tree2?...?showNav="false"?...>

然后再讓文件夾圖標(代表包含子節(jié)點的節(jié)點)變的可點擊:

·?????????<h:commandLink?action="#{t.toggleExpanded}"?actionListener="#{navigationBacker.processAction}">

然后在 Java 代碼中接受鼠標點擊的事件。在?NavigationBacker.java?文件中的processAction(ActionEvent?e) 方法里,我從 EJB3-persistency?中加載子結(jié)點的數(shù)據(jù)。

不好的是“+”圖標變的不可見,但是我現(xiàn)在沒有辦法獲取點擊“+”圖標的事件。

看起來在org.apache.myfaces.custom.tree2.HtmlTree.java這個文件里是通過注冊了_expandControl?=?new?HtmlCommandLink();?從內(nèi)部獲取“+”的點擊事件,但是我現(xiàn)在沒有辦法從我的代碼中接受到這一事件。

為了導航,我使用了含有entries的TreeNode.getIdentifier() (參見:#{node.identifier}),看起來就是這個樣子:

·?????????db_id="car_id=7,person_id=2"

這代表了后臺數(shù)據(jù)庫表的主鍵(我還沒有找到一個更好的解決方案用于導航)

程序代碼如下:

navigation.jsp?

??<t:tree2?id="serverTree"?value="#{navigationBacker.treeData}"
????var
="node"?varNodeToggler="t"?clientSideToggle="false"?showNav="false"
????showRootNode
="false">
????
<f:facet?name="project-folder">
??????
<h:panelGroup>
????????
<h:commandLink?action="#{t.toggleExpanded}"?actionListener="#{navigationBacker.processAction}">
????????????
<t:graphicImage?value="/images/yellow-folder-open.png"
????????????????rendered
="#{t.nodeExpanded}"?border="0"?/>
????????????
<t:graphicImage?value="/images/yellow-folder-closed.png"
????????????????rendered
="#{!t.nodeExpanded}"?border="0"?/>
????????
</h:commandLink>
????????
<h:commandLink?action="#{navigationBacker.toViewId}"
????????????styleClass
="#{t.nodeSelected???'documentSelected':'document'}"
????????????actionListener
="#{navigationBacker.nodeClicked}"
????????????value
="#{node.description}"?immediate="true">
????????????
<f:param?name="db_id"?value="#{node.identifier}"?/>
????????????
????????
</h:commandLink>
????????
<h:outputText?value="?(#{node.childCount})"?styleClass="childCount"
????????????rendered
="#{!empty?node.children}"?/>
??????
</h:panelGroup>
????
</f:facet>
????
<f:facet?name="person-folder">
??????
<h:panelGroup>

NavigationBacker.java?

????/**
?????*?攔截節(jié)點被展開的事件,并加載額外的數(shù)據(jù)
?????*?
@param?event
?????*?
@throws?AbortProcessingException
?????
*/

????
public?void?processAction(ActionEvent?event)?throws?AbortProcessingException?{
????????????System.out.println("Entering?processAction()");
????????????UIComponent?component?
=?(UIComponent)?event.getSource();
????????????
while?(!(component?!=?null?&&?component?instanceof?HtmlTree))?{
????????????????????component?=?component.getParent();
????????????}

????????????
if?(component?!=?null)?{
????????????????????HtmlTree?tree?=?(HtmlTree)?component;
????????????????????TreeNodeBase?node?
=?(TreeNodeBase)?tree.getNode();
????????????????????
if?(!tree.isNodeExpanded()?&&?node.getChildren().size()?==?0)?{
????????????????????????Map<String,?String>?map?=?splitKeyValues(node.getIdentifier());?//?一些輔助代碼,用于將?"car_id=7"?或?"car_id=7&person_id=12"?拆分開
????????????????????????this.car_id?=?map.get("car_id");
????????????????????????
if?(this.car_id?!=?null)?{
????????????????????????????appendPersonsNodes(node);?//?參見下面的例子
????????????????????????}

????????????????????????
this.person_id?=?map.get("person_id");
????????????????????????
if?(this.person_id?!=?null)?{
????????????????????????????appendLicensesNodes(node);?//?沒有顯示
????????????????????????}

????????????????????}

????????????}

????}


????
/**?把當前car_id下的Person子結(jié)點加入導航中?*/
????
private?void?appendPersonsNodes(TreeNodeBase?carDetailNode)?{
????????VariableResolver?resolver?=?FacesContext.getCurrentInstance()
????????.getApplication().getVariableResolver();
????????PersonsTable?personsTable?
=?(PersonsTable)?resolver
????????????????.resolveVariable(FacesContext.getCurrentInstance(),
????????????????????????
"personsTable");
????????List
<Person>?personsList?=?personsTable.getCarPersons();
????????
for?(Person?o?:?personsList)?{
????????????List<TreeNodeBase>?list?=?carDetailNode.getChildren();
????????????list.add(
new?TreeNodeBase("person-folder",?o.getDescription(),
????????????????????????????
"person_id="?+?o.getPersonId(),?true));
????????}

????????System.out.println(
"NavigationBacker?fetched?"?+?personsList.size()?+?"?Persons?for?carId="?+?this.car_id);
????}


這里有一段輔助代碼用于從?h:commandLink?中獲取?f:param?用于多種用途。

????/**
?????*?當?JSF?組件?h:commandLink?包含有?f:param?成員,?這些?name-value?對被放到?
*?request?參數(shù)表中供后面的action?handler使用。不幸的是,這樣的用法不能用在
*?h:commandButton上。我們沒有辦法把通過?button?來傳遞這些參數(shù)。
?????*
?????*?因為?Action?Listeners?可以保證在?Action?方法前被執(zhí)行到,所以?Action?Listeners?
*?可以調(diào)用該方法更新?Action?方法所需要的任何上下文。
?????*
?????*?From?
http://cvs.sakaiproject.org/release/2.0.0/
?????*?sakai2/gradebook/tool/src/java/org/sakaiproject/tool/gradebook/jsf/FacesUtil.java
?????*?Educational?Community?License?Version?1.0
?????
*/

????
public?static?final?Map?getEventParameterMap(FacesEvent?event)?{
????????Map<String,?String>?parameterMap?=?new?HashMap<String,?String>();
????????List?children?
=?event.getComponent().getChildren();
????????
for?(Iterator?iter?=?children.iterator();?iter.hasNext();)?{
????????????Object?next?=?iter.next();
????????????
if?(next?instanceof?UIParameter)?{
????????????????UIParameter?param?=?(UIParameter)?next;
????????????????parameterMap.put(param.getName(),?
""?+?param.getValue());
????????????}

????????}

????????
//System.out.println("parameterMap="?+?parameterMap);
????????return?parameterMap;
????}


注:在上面的例子里,backing bean都存放于?session?作用域里,可以在WEB-INF/examples-config.xml?中進行配置。

?

很多朋友和我交流了一些有關(guān) Tree2 的問題,我把一些大家經(jīng)常碰到的問題拿出來,希望剛開始學習的朋友能夠避免再犯一些這樣的錯誤。

1.首先就是關(guān)于 myfaces 包的問題,Myfaces 1.1.1 release 版本的 Tree2 是有 bug 的,大概在十一月份的時候修正了大部分問題,但是由于這以后并沒有 release 版本出來,所以大家可以使用一些較新一點的 Nightly Build,可以去這里找找http://cvs.apache.org/builds/myfaces/nightly/?,不過從元旦后似乎改用了 Maven 后還沒有一個 Build 出來,我手上有一個12.30 Build的版本,如果需要的話可以和我聯(lián)系。因為這些 Nightly Build 不確定可能還會有其它的一些問題,所以用的時候要慎重一點。

2.?有些朋友就直接把代碼貼上去用,會碰到一些諸如點擊沒有反應或者圖標顯示不出來的問題,很多時候是因為沒有加上MyFaces' Extensions Filter,相關(guān)的內(nèi)容可以參考我前面寫的http://www.blogjava.net/steady/archive/2005/11/17/20170.html。

希望這兩篇介紹 Tree2 的文章能給大家一些新的認識,今后也會努力拿出更多更好的東西來和大家分享

本文轉(zhuǎn)自kenty博客園博客,原文鏈接http://www.cnblogs.com/kentyshang/archive/2008/06/05/1214087.html如需轉(zhuǎn)載請自行聯(lián)系原作者


kenty

總結(jié)

以上是生活随笔為你收集整理的MyFaces Tree2控件使用 -----From http://blog.163.com/net_wood/blog的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 色噜噜色综合 | 亚洲成人久 | 98国产精品| 欧美精品亚洲 | 色av中文字幕| 亚洲精品乱码久久久久久蜜桃欧美 | √天堂资源在线 | 亚洲色欲色欲www | 国产吃瓜在线 | 一区二区三区四区五区在线视频 | 91麻豆精品国产 | 久久久久少妇 | 国产成人三级在线观看 | 亚洲欧美日韩专区 | 夜夜爽夜夜叫夜夜高潮漏水 | 日本高清有码视频 | 美女露出让男生揉的视频 | 亚洲国产欧美日韩在线 | 日韩一区在线看 | 精品国产一区二区三区久久久蜜臀 | 女人久久久久 | 亚洲一区二区三区麻豆 | 午夜啪啪网 | 伊人99re | 九九久久免费视频 | 狠狠操天天操 | 最新91视频| 一级片成人| 黄色片视频网站 | 亚洲欧美日本在线 | 卡一卡二在线视频 | 黄色网页在线观看 | 免费的av片 | h片在线免费 | 裸体一区二区三区 | 国产精华一区二区三区 | 国产精品一区二区自拍 | 91精彩视频在线观看 | 日本精品在线观看视频 | 97超碰免费 | 干日本少妇首页 | 中文字幕在线观看视频网站 | 亚洲精品码 | 激情婷婷在线 | 亚洲精品一区二区在线 | 国产精品久久久久久久免费 | 久久精品久久久久久 | 成人性生交大片免费看vrv66 | 玉米地疯狂的吸允她的奶视频 | 男人操女人免费网站 | www.成人av.com| 日本aⅴ在线观看 | 欧美在线三级 | 伊人影院综合在线 | 国产又大又黑又粗免费视频 | 久久人人爱 | 久久色播| 婷婷激情网站 | 国产麻豆一区二区三区 | 91在线网站 | 日本爽妇网 | 下面一进一出好爽视频 | 中文字幕永久在线观看 | 91香蕉在线视频 | 在线观看av不卡 | 久久精品久久精品久久精品 | 成人av网址在线观看 | 亚洲色图一区二区三区 | 欧美大黑b | 亚洲欧美另类图片 | 91成人观看 | 国产伊人av| 久草网在线观看 | 美女在线观看视频 | 久久久久无码精品国产sm果冻 | 深爱开心激情 | 激情欧美一区二区三区 | 欧美xxxxxx片免费播放软件 | 久久亚洲国产精品 | 性猛交xxxx乱大交3 | 久久五月网 | 免费日韩一区 | 欧美成人aaa | 一区二区中文字幕 | 亚洲高清欧美 | 成人免费观看网址 | 欧美亚洲天堂网 | 人人艹视频 | 国产黄a三级三级三级看三级男男 | 美女高潮黄又色高清视频免费 | 粉嫩av蜜桃av蜜臀av | 久久黄页| 91麻豆国产福利精品 | 91久久精品国产91久久 | 日本免费三片在线播放 | 亚洲高清中文字幕 | 免费看黄色网址 | 国产一区 在线播放 | feel性丰满白嫩嫩hd |