<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    白日不到處,青春恰自來(lái)。
    苔花如米小,亦學(xué)牡丹開(kāi)。
    posts - 4,  comments - 34,  trackbacks - 0
          最近接觸yui-ext,被它漂亮的界面征服,于是想把它運(yùn)用到項(xiàng)目里面。
    公司目前是用dwr來(lái)實(shí)現(xiàn)一些簡(jiǎn)單的ajax功能,想把yui-ext結(jié)合dwr,但目前網(wǎng)上還很少有這樣的例子,參考了yui-ext論壇里面的文章,做了一個(gè)簡(jiǎn)單的分頁(yè)例子(下載)。
        dwrproxy.js,這里只需要修改很少的地方。   
    Ext.data.DWRProxy = function(dwrCall, pagingAndSort){
      Ext.data.DWRProxy.superclass.constructor.call(
    this);
      
    this.dwrCall = dwrCall;
      
    //this.args = args;
        this.pagingAndSort = (pagingAndSort!=undefined ? pagingAndSort : true);
    }
    ;

    Ext.extend(Ext.data.DWRProxy, Ext.data.DataProxy, 
    {
      load : function(params, reader, callback, scope, arg) 
    {
        
    if(this.fireEvent("beforeload"this, params) !== false{
          var sort;
          
    if(params.sort && params.dir) sort = params.sort + ' ' + params.dir;
          
    else sort = '';
          var delegate 
    = this.loadResponse.createDelegate(this, [reader, callback, scope, arg], 1);
          var callParams 
    = new Array();
        
            
                
    //if(this.pagingAndSort) {
              
    //callParams.push(params.start);
              
    //callParams.push(params.limit);
              
    //callParams.push(sort);
                
    //}

          
    //這里的arg.params包含了分頁(yè)時(shí)用到的基礎(chǔ)參數(shù)和用戶(hù)查詢(xún)時(shí)自定義的參數(shù)    
          callParams.push(arg.params);
          callParams.push(delegate);
          
         
    //console.debug(callParams);         
         
          
    this.dwrCall.apply(this, callParams);
        
        }
     else {
          callback.call(scope 
    || thisnull, arg, false);
        }

      }
    ,

      loadResponse : function(listRange, reader, callback, scope, arg) 
    {
        var result;
        
    //console.debug(listRange); 
        try {
          result 
    = reader.read(listRange);
        }
     catch(e) {
          
    this.fireEvent("loadexception"thisnull, response, e);
          callback.call(scope, 
    null, arg, false);
          
    return;
        }

        callback.call(scope, result, arg, 
    true);
      }
    ,

      update : function(dataSet)
    {},

      updateResponse : function(dataSet)
      
    {}
    }
    );

    Ext.data.ListRangeReader 
    = function(meta, recordType){
        Ext.data.ListRangeReader.superclass.constructor.call(
    this, meta, recordType);
        
    this.recordType = recordType;
    }
    ;
    Ext.extend(Ext.data.ListRangeReader, Ext.data.DataReader, 
    {
      getJsonAccessor: function()
    {
          var re 
    = /[\[\.]/;
          
    return function(expr) {
              
    try {
                  
    return(re.test(expr))
                      
    ? new Function("obj""return obj." + expr)
                      : function(obj)
    {
                          
    return obj[expr];
                      }
    ;
              }
     catch(e){}
              
    return Ext.emptyFn;
          }
    ;
      }
    (),
        
        read : function(o)
    {
            var recordType 
    = this.recordType, fields = recordType.prototype.fields;

            
    //Generate extraction functions for the totalProperty, the root, the id, and for each field
            if (!this.ef) {
                
    if(this.meta.totalProperty) {
                    
    this.getTotal = this.getJsonAccessor(this.meta.totalProperty);
                }

            
                
    if(this.meta.successProperty) {
                    
    this.getSuccess = this.getJsonAccessor(this.meta.successProperty);
                }


                
    if (this.meta.id) {
                    var g 
    = this.getJsonAccessor(this.meta.id);
                    
    this.getId = function(rec) {
                        var r 
    = g(rec);
                        
    return (r === undefined || r === ""? null : r;
                    }
    ;
                }
     else {
                    
    this.getId = function(){return null;};
                }

                
    this.ef = [];
                
    for(var i = 0; i < fields.length; i++){
                    f 
    = fields.items[i];
                    var map 
    = (f.mapping !== undefined && f.mapping !== null? f.mapping : f.name;
                    
    this.ef[i] = this.getJsonAccessor(map);
                }

            }


           var records 
    = [];
           var root 
    = o.data, c = root.length, totalRecords = c, success = true;

           
    if(this.meta.totalProperty){
            var v 
    = parseInt(this.getTotal(o), 10);
                
    if(!isNaN(v)){
                    totalRecords 
    = v;
                }

            }


            
    if(this.meta.successProperty){
                var v 
    = this.getSuccess(o);
                
    if(v === false || v === 'false'){
                    success 
    = false;
                }

            }


            
    for(var i = 0; i < c; i++){
            var n 
    = root[i];
          var values 
    = {};
          var id 
    = this.getId(n);
          
    for(var j = 0; j < fields.length; j++){
                    f 
    = fields.items[j];
            var v 
    = this.ef[j](n);                        
            values[f.name] 
    = f.convert((v !== undefined) ? v : f.defaultValue);
          }

          var record 
    = new recordType(values, id);
          records[i] 
    = record;
        }


        
    return {
           success : success,
           records : records,
           totalRecords : totalRecords
        }
    ;
      }

    }
    );

         paging.js,分頁(yè)時(shí)的調(diào)用的寫(xiě)法。
      
    /*

     * Ext JS Library 1.0.1

     * Copyright(c) 2006-2007, Ext JS, LLC.

     * licensing@extjs.com

     * 

     * 
    http://www.extjs.com/license

     
    */




    Ext.onReady(function()
    {


        var recordType 
    = Ext.data.Record.create([

            
    {name: "id", type: "int"},

            
    {name: "department", type: "string"},

            
    {name: "operator", mapping:"operator.pname", type: "string"},

            
    {name: "content", mapping:"content", type: "string"}

          ]);

              
        
    // create the Data Store
        var ds = new Ext.data.Store({
            
    // load using DWRProxy
            proxy: new Ext.data.DWRProxy(MeetingService.findMeetingby, true),

            
    // create reader that reads the Topic records
            reader: new Ext.data.ListRangeReader({
                totalProperty: 
    'totalSize',
                id: 
    'id'
            }
    , recordType),

            
    // turn on remote sorting
            remoteSort: true
        }
    );
        
    //ds.setDefaultSort('department', 'desc');

        
    // pluggable renders
        function renderTopic(value, p, record){
            
    return String.format('<b>{0}</b>{1}', value, record.data['operator']);
        }

        function renderTopicPlain(value)
    {
            
    return String.format('<b><i>{0}</i></b>', value);
        }

        function renderLast(value, p, r)
    {

            
    return String.format('{0}<br/>by {1}', value, r.data['department']);
        }

        function renderLastPlain(value)
    {
            
    return value;
        }


        
    // the column model has information about grid columns
        
    // dataIndex maps the column to the specific data field in
        
    // the data store
        var cm = new Ext.grid.ColumnModel([{
               id: 
    'department'// id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
               header: "部門(mén)",
               dataIndex: 
    'department',
               width: 
    150,
               renderer: renderTopic,

               sortable: 
    true,
               css: 
    'white-space:normal;'
            }
    ,{
               header: 
    "操作人",
               dataIndex: 
    'operator',
               width: 
    150,

               sortable: 
    true,
               hidden: 
    false        //    隱藏列
            }
    ,{
               id: 
    'content',
               header: 
    "內(nèi)容",
               dataIndex: 
    'content',
               width: 
    250,

               sortable: 
    true,
               renderer: renderLast
            }
    ]);

        
    // by default columns are sortable
        
    //cm.defaultSortable = true;

        
    // create the editor grid
        var grid = new Ext.grid.Grid('meeting-grid'{
            ds: ds,
            cm: cm,
            selModel: 
    new Ext.grid.RowSelectionModel({singleSelect:true}),
            enableColLock:
    false,
            loadMask: 
    true    //是否顯示正在加載
        }
    );

        
    // make the grid resizable, do before render for better performance
        var rz = new Ext.Resizable('meeting-grid'{
            wrap:
    true,
            minHeight:
    100,
            pinned:
    true,
            handles: 
    's'
        }
    );
        rz.on(
    'resize', grid.autoSize, grid);

        
    // render it
        grid.render();

        var gridFoot 
    = grid.getView().getFooterPanel(true);

        
    // add a paging toolbar to the grid's footer
        var paging = new Ext.PagingToolbar(gridFoot, ds, {
            pageSize: 
    5,
            displayInfo: 
    true,
            displayMsg: 
    '顯示 {0} - {1} of {2}',
            emptyMsg: 
    "沒(méi)有記錄"
        }
    );
        
    // add the detailed view button
        paging.add('-'{
            pressed: 
    true,
            enableToggle:
    true,
            text: 
    '詳細(xì)信息',
            cls: 
    'x-btn-text-icon details',
            toggleHandler: toggleDetails
        }
    );

        
    // trigger the data store load
       
    // ds.load({params:{start:0, limit:5}, extraParams:{dept:'test', viaParam:true}});        

        
    //ds.load({params:{start:0, limit:5, department:'test', viaPara:true}});    

        
    //ds.load({params:{start:0, limit:5}});    

        

        
    //查詢(xún)時(shí)需要用到的參數(shù)

        ds.on(
    'beforeload', function() {

              ds.baseParams 
    = {

                dept: 
    'test111',

                viaParam: 
    true

              }
    ;

            }
    );    

        
    //分頁(yè)基本參數(shù)    

        ds.load(
    {params:{start:0, limit:5}});    

            

        function toggleDetails(btn, pressed)
    {
            cm.getColumnById(
    'department').renderer = pressed ? renderTopic : renderTopicPlain;
            cm.getColumnById(
    'content').renderer = pressed ? renderLast : renderLastPlain;
            grid.getView().refresh();
        }

    }
    );

      dwr調(diào)用后臺(tái)的處理方式:

    public ListRange findMeetingby(Map condition) {
            
    // TODO Auto-generated method stub
            int totalRecords = getContentCount();
            HQuery hquery 
    = new HQuery();
            hquery.setPageStartNo(Integer.parseInt(condition.get(
    "start").toString()));
            hquery.setNumberPerPages(Integer.parseInt(condition.get(
    "limit").toString()));
            hquery.setQueryString(
    "from Meeting as a ");
            StringBuffer sb 
    = new StringBuffer();
            sb.append(
    "order by ");
            
    if(condition.get("sort"!= null && condition.get("dir"!= null){
                sb.append(
    "a.");
                sb.append(condition.get(
    "sort"));
                sb.append(
    " ");
                sb.append(condition.get(
    "dir"));
            }
    else
                sb.append(
    "a.lastModifiedDate desc");
            
            hquery.setOrderby(sb.toString());
            List ls 
    =  this.getBaseDao().executeQuery(hquery);
            
    return new ListRange(ls.toArray(), totalRecords);
        }

       

     

    posted on 2007-06-05 09:30 凍僵的魚(yú) 閱讀(8524) 評(píng)論(33)  編輯  收藏

    FeedBack:
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子[未登錄](méi)
    2007-06-05 13:21 | yy
    可以提供dome下載么  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-05 17:19 | 凍僵的魚(yú)
    已經(jīng)加上Demo下載了  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-06 10:22 | 匿名
    所提供的代碼運(yùn)行時(shí)報(bào)錯(cuò),TodoService未定義,錯(cuò)誤是從grid.js中報(bào)出來(lái)的  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-06 16:14 | 凍僵的魚(yú)
    由于這里只能上傳2M附件,我把例子lib目錄里面dwr.jar和spring.jar刪掉了,你把dwr2.0.1、Spring2.0.4放進(jìn)去就能運(yùn)行了。
      回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-06 16:14 | hama
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-06 16:14 | hama
    完全盜版  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-06 16:46 | 凍僵的魚(yú)
    我也已經(jīng)說(shuō)過(guò)是參考了yui-ext論壇里面的文章,但它那個(gè)例子有些問(wèn)題,翻頁(yè)和排序時(shí)自定義的參數(shù)傳掉,在這基礎(chǔ)上做了一些改動(dòng),在IE7和FF都測(cè)試通過(guò)。  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-06 17:42 | 匿名
    我放了的,共放了3個(gè)jar:commons-logging-1.0.4.jar、dwr.jar、spring.jar,但出現(xiàn)TodoService未定義的錯(cuò)誤
    to:凍僵的魚(yú) 這個(gè)代碼你運(yùn)行正常?  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-06 17:58 | 凍僵的魚(yú)
    代碼是測(cè)試通過(guò)的,你看下是不是DWR與tomcat有沖突了,看下tomcat日志  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-07 14:41 | 匿名
    原來(lái)是我把dwr的包弄錯(cuò)了,我用的是1.1的包,換成2.0.1就正常了,謝謝  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-15 12:18 | mican
    你的那個(gè) dwrproxy.js 是否是通用的,就是我改了一下grid.js 里的recordType,有個(gè)字段為時(shí)間類(lèi)型,我是這樣設(shè)置的
    var recordType = Ext.data.Record.create([
    {name: "id", type: "int"},
    {name: "user",mapping:"aMsg.user", type: "string"},
    {name: "sayto", mapping:"aMsg.sayto", type: "string"},
    {name: "content",mapping:"aMsg.content", type: "string"},
    {name: "sendtime", mapping:"aMsg.sendtime", type: "date",dateFormat: 'timestamp'}
    ]);
    但是運(yùn)行的時(shí)候他老抱這個(gè)錯(cuò):Error: TypeError, 'response' 未定義,請(qǐng)指點(diǎn)  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-15 15:17 | 凍僵的魚(yú)
    你的aMsg.sendtime是什么日期類(lèi)型的?
    我測(cè)試過(guò)java.util.Date和java.sql.Timestamp都正常~~  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-15 15:57 | 解凍的魚(yú)
    我也來(lái)試試,謝謝斑竹  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-15 16:30 | 解凍的魚(yú)
    不錯(cuò),我在新公司可以借鑒。
    我以前公司的ajax界面,可以做到上邊是每條記錄的form,下邊是list列表,兩個(gè)公用一個(gè)dataset,類(lèi)似dephi.我發(fā)現(xiàn)workshop可以實(shí)現(xiàn)這樣的功能,yui不知道可不可以。  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-16 13:34 | mican
    凍僵的魚(yú) 能說(shuō)說(shuō)ds 和cm里 的時(shí)間類(lèi)型你是怎么定義的,比如我返回的數(shù)據(jù)里的時(shí)間格式是:yyyy-MM-dd hh:mm:ss  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-18 09:32 | 凍僵的魚(yú)
    to mican
    只需要在cm定義指定一個(gè)renderer就可以了
    var cm = new Ext.grid.ColumnModel(
    [

    {
    header: 'Reg Date',
    width: 150,
    sortable: true,
    renderer: Ext.util.Format.dateRenderer('Y/m/d'),
    dataIndex: 'regDate'
    }
    ]
    );  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-18 09:40 | 凍僵的魚(yú)
    to 解凍的魚(yú)
    我也在嘗試實(shí)現(xiàn)類(lèi)似你所說(shuō)的那種效果,對(duì)于yui,我也是剛接觸不久,希望有空可以多交流AJAX技術(shù),MSN:zyh2k at msn.com。  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-22 09:57 | 解凍的魚(yú)
    我看了yui-ext的form,是store刷新的,應(yīng)該可以實(shí)現(xiàn)我說(shuō)的那種功能。
    yui-ext其實(shí)是無(wú)所不能的,還支持拖動(dòng),太牛了。  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-06-22 10:03 | 解凍的魚(yú)
    我的msn:matt_wang129@hotmail.com,多交流  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-07-12 19:20 | Harrison
    感謝大蝦的幫助先!
    我的問(wèn)題:
    ReferenceError: response is not defined

    怎么回事?  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-07-13 09:33 | 凍僵的魚(yú)
    to Harrison:
    在dwr調(diào)試頁(yè)面對(duì)調(diào)用的方法測(cè)試正常不?  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-07-13 10:49 | Harrison
    To 凍僵的魚(yú)
    十分感謝您的回復(fù)先!
    沒(méi)錯(cuò),我的DWR調(diào)用很正常,后臺(tái)Debug時(shí),在service里也返回的正常的數(shù)據(jù)。在FF下的FireBug中也看到了script的response。

    另外,我的msn: gyao1979@hotmail.com , 想和您深入交流。謝謝!  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-08-12 23:33 | jiajiacat
    謝謝,不過(guò) findMeetingby(Map condition) 非范型,dwr老是出
    WARN DefaultConverterManager:59 - Missing type info for getItems(0<0>). Assuming this is a map with String keys. Please add to <signatures> in dwr.xml的警告,如何解決?  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-08-15 10:20 | xx
    根本就顯示不出數(shù)據(jù),dwr以及該目錄下的js怎么沒(méi)有?  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-08-31 09:28 | 凍僵的魚(yú)
    @jiajiacat
    dwr.xml配置一下signatures就行了  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-08-31 09:30 | 凍僵的魚(yú)
    @xx
    由于這里只能上傳2M附件,我把例子lib目錄里面dwr.jar和spring.jar刪掉了,你把dwr2.0.1、Spring2.0.4放進(jìn)去就能運(yùn)行了。
      回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-09-27 17:29 | xpy
    十分感謝您!還有些問(wèn)題想問(wèn)問(wèn)。我MSN:z278440337@126.com  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-11-08 17:26 | powe
    麻煩樓主解答下,我后臺(tái)返回的數(shù)據(jù)是個(gè)List類(lèi)型的,List的元素是Bean,那為什么頁(yè)面沒(méi)數(shù)據(jù)顯示阿,也沒(méi)報(bào)錯(cuò)。ListRange類(lèi)型的我的包里怎么沒(méi)有!  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2007-12-13 15:40 | 凍僵的魚(yú)
    @powe
    不好意思,最近比較忙,很少上blog
    "List的元素是Bean", 你在dwr.xml有沒(méi)有定義相應(yīng)的convert bean?
    例子里面的ListRange類(lèi),你可以不使用它,只需要在后臺(tái)按格式封裝數(shù)據(jù)就行:
    public ListRange findMeetingby(Map condition) {
    .......
    hquery.setOrderby(sb.toString());
    List ls = this.getBaseDao().executeQuery(hquery);
    //return new ListRange(ls.toArray(), totalRecords); //這里可以不使用ListRange類(lèi)

    Map result = new HashMap(2);
    result.put("totalSize", new Integer(totalRecords));
    result.put("data", ls.toArray());
    return result;
    }
      回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2008-02-28 22:27 | jw
    這個(gè)支持排序嗎,在哪個(gè)地方???  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2008-03-15 22:40 | yinhao
    看來(lái)樓主,對(duì)EXT有很深的研究呀.
    小弟,最近出現(xiàn)了一個(gè)問(wèn)題,煩了我好幾天呀.不知道樓主能不能幫小弟解決一下.
    在下,不勝感激.

    當(dāng)我訪問(wèn)DWR里面的方法時(shí),數(shù)據(jù)返回正常.可是到頁(yè)面EditGrid里面卻只有列標(biāo)題.表格里面沒(méi)有任何數(shù)據(jù).而且,頁(yè)面也沒(méi)有報(bào)錯(cuò).

    急救.


      回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子[未登錄](méi)
    2008-04-02 16:40 | sean
    怎么沒(méi)有排序的功能啊?  回復(fù)  更多評(píng)論
      
    # re: 結(jié)合dwr的yui-ext分頁(yè)例子
    2010-02-16 15:45 | kingdy
    非常感謝分享,在搞一個(gè)ext和dwr整合的項(xiàng)目,現(xiàn)在問(wèn)題解決了。  回復(fù)  更多評(píng)論
      

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    <2008年4月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    常用鏈接

    留言簿(3)

    隨筆檔案(4)

    相冊(cè)

    搜索

    •  

    積分與排名

    • 積分 - 14064
    • 排名 - 2060

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 乱淫片免费影院观看| 深夜特黄a级毛片免费播放| 久久不见久久见免费视频7| 亚洲精品少妇30p| 亚洲午夜一区二区电影院| 最近中文字幕mv免费高清在线| 亚洲自偷自拍另类12p| 狠狠入ady亚洲精品| 国产精品va无码免费麻豆| 亚洲youwu永久无码精品| 蜜桃成人无码区免费视频网站 | 亚洲精品麻豆av| 免费人成在线观看播放a| 亚洲Av无码国产情品久久 | 国产乱子伦精品免费视频| 免费观看AV片在线播放| 亚洲国产另类久久久精品小说| 中国一级毛片免费看视频| 免费国产成人高清视频网站| 男性gay黄免费网站| 亚洲日韩在线第一页| 亚洲av无码专区青青草原| 国产免费观看视频| 99热亚洲色精品国产88| 高清国语自产拍免费视频国产| 国产AV无码专区亚洲AV蜜芽| 亚洲VA综合VA国产产VA中| 久久久精品国产亚洲成人满18免费网站| 亚洲熟妇av一区二区三区| 国产99视频精品免费专区| 久久亚洲AV成人无码| 亚洲免费网站观看视频| 亚洲国产精品无码观看久久| 国产亚洲福利一区二区免费看| 又硬又粗又长又爽免费看 | 久久免费美女视频| 亚洲欧洲久久精品| 四虎www免费人成| 亚洲乱码中文字幕小综合| 天天看免费高清影视| 免费国产va视频永久在线观看|