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

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

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

    云自無心水自閑

    天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
    posts - 288, comments - 524, trackbacks - 0, articles - 6
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    在table中,如果表格內(nèi)容為空,那么顯示的時(shí)候,表格的邊框會少掉一塊。在HTML的規(guī)范中,應(yīng)該使用empty-cells: show這個(gè)style來解決,但是IE要到IE8之后才支持這個(gè)屬性。而FireFox2是已經(jīng)支持了。

    那么在IE7之前的版本中要解決這個(gè)問題,好像是需要使用border-collapse:collapse;這個(gè)style.

    <table style="border-collapse:collapse">

    posted @ 2008-04-14 08:03 云自無心水自閑 閱讀(549) | 評論 (0)編輯 收藏


    首先,在web項(xiàng)目的頁面根目錄下建立目錄template
    然后創(chuàng)建目錄simple和xhtml,以上的目錄名是struts2缺省使用的,不同的主題使用相應(yīng)的目錄。然后再創(chuàng)建一個(gè)components目錄,在這個(gè)目錄下,創(chuàng)建一個(gè)property.ftl。 最后的目錄結(jié)構(gòu)如下:
    template/simple/components/property.ftl
    template/xhtml/components/property.ftl

    然后在property.ftl中可以使用FreeMarker來定義新的模板(FreeMarker的具體語法可以查看FreeMarker的官方網(wǎng)站,相當(dāng)?shù)脑敿?xì)易懂):
    <#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
    <@s.if test="${parameters.value} == null || ${parameters.value} == '' ">&nbsp;</@s.if>
    <@s.else><@s.property value="${parameters.value}" /></@s.else>
    <#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" />

    以上是一個(gè)我自定義的模板,檢測結(jié)果是否為空字符串,如果是空的話,就輸出一個(gè)&nbsp; 這樣在輸出結(jié)果時(shí)表格的邊框線就是完整的了。

    定義好之后,在jsp頁面中就可以這樣使用了:

    <s:component template="/components/property.ftl" theme="simple">
      <s:param name="value" value="%{'bookName'}"/>
    </s:component>

    第一行中的目錄名從自components開始,struts2會自動在template目錄下去尋找,如是主題是simple, 就在simple目錄下找。
    另外,param的語法要注意一下,%{}里面需要加一對引號

    posted @ 2008-04-11 16:09 云自無心水自閑 閱讀(7565) | 評論 (4)編輯 收藏

    在Struts2的官方網(wǎng)站上,有doubleselect的用法示例,但是那個(gè)例子比較簡單。
    <s:doubleselect label="doubleselect test2" name="menu" list="#{'fruit':'Nice Fruits', 'other':'Other Dishes'}" doubleName="dishes" doubleList="top == 'fruit' ? {'apple', 'orange'} : {'monkey', 'chicken'}" />
    上面的例子演示了doubleselect的基本用法,但是其list和doubleList都是固定的。尤其是doublelist的切換使用了3目運(yùn)算符 ? :,并沒有太大的實(shí)際使用價(jià)值。在實(shí)際應(yīng)用中,list往往是action返回的一個(gè)List<DataObject>,listKey和listValue來顯示第一級下拉框,doubleList往往是一個(gè)Map<Integer, List<DataObject>>,其中Map中的Key值是第一級下拉框的listKey。
    舉個(gè)例子:
    Data Object:
    public class Book {
            
    private int id;
            
    private String name;
            
    private int categoryId;

            
    // getter and setter..
    }


    public class Category {
            
    private int id;
            
    private String name;

            
    // getter and setter..
    }


    JSP:
    <s:doubleselect list="categoryList" listKey="id" listValue="name"
       doubleName="bookId" doubleList="bookMap.get(top.id)" doubleListKey="id" doubleListValue="name" theme="simple"/>

    此處要注意的是top的用法,開始我以為top就是指代list的值,所以使用的是bookMap.get(top),但是二級下拉框一直是空白,后來我突然想到說不定top是一個(gè)Category實(shí)例呢,嘗試了一下top.id,果然成功了。

    Action:

    public class DemoAction {
            
    private Map<Integer, List<Book>> bookMap;
            
    private List<Category> categoryList;

            
    public String execute() throws Exception {
                    categoryList 
    = new ArrayList<Cateogry>();

                    Category category;
                    category 
    = new Category();
                    category.setId(
    1);
                    category.setName(
    "Fiction");
                    categoryList.add(category);
                    category 
    = new Category();
                    category.setId(
    2);
                    category.setName(
    "Java");
                    categoryList.add(category);

     

                    bookMap 
    = new HashMap<Integer, List<Book>>();

                    List
    <Book> bookList = new ArrayList<Book>();
                    Book book;
                    book 
    = new Book();
                    book.setId(
    1);
                    book.setName(
    "Harry Porter");
                    book.setCategoryId(
    1);
                    bookList.add(book);

                    book 
    = new Book();
                    book.setId(
    2);
                    book.setName(
    "Nightmare");
                    book.setCategoryId(
    1);
                    bookList.add(book);

                    bookMap.put(
    1, bookList);

     

                    bookList 
    = new ArrayList<Book>();
                    book 
    = new Book();
                    book.setId(
    3);
                    book.setName(
    "Thinking in Java");
                    book.setCategoryId(
    2);
                    bookList.add(book);
                    book 
    = new Book();
                    book.setId(
    4);
                    book.setName(
    "Head First Design Patterns");
                    book.setCategoryId(
    2);
                    bookList.add(book);

                    bookMap.put(
    2, bookList);


                    
    return SUCCESS;
            }

            
    // getter and setter..
    }



    posted @ 2008-03-27 22:08 云自無心水自閑 閱讀(12166) | 評論 (16)編輯 收藏

    對于jsp頁面,為了防止頁面被服務(wù)器緩存、始終返回同樣的結(jié)果。

    通常的做法是在客戶端的url后面加上一個(gè)變化的參數(shù),比如加一個(gè)當(dāng)前時(shí)間。

    我現(xiàn)在使用的方法是在jsp頭部添加以下代碼:

    <%
        request.setAttribute("decorator", "none");
        response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
        response.setHeader("Pragma","no-cache"); //HTTP 1.0
        response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
    %>

    這樣如果有多個(gè)調(diào)用此頁面的鏈接就不需要一個(gè)一個(gè)全部添加參數(shù)了。

    posted @ 2008-03-18 14:06 云自無心水自閑 閱讀(4304) | 評論 (2)編輯 收藏

    在數(shù)據(jù)庫的設(shè)計(jì)中,字典項(xiàng)是經(jīng)常使用的技巧。
    比如在一個(gè)圖書館系統(tǒng)中,書籍表(Book)會有一個(gè)分類字段,這時(shí)候我們一般會單獨(dú)建立一張分類表(Category),在書籍表只保存分類表的ID。
    在用戶界面上顯示書籍明細(xì)的時(shí)候,會要求顯示CategoryID在Category表中對應(yīng)的名稱。
    這樣通常的做法是把Book和Category兩張表進(jìn)行關(guān)聯(lián)。
    但在實(shí)際應(yīng)用中,Category一般都是Cache在應(yīng)用服務(wù)器端,再使用數(shù)據(jù)表的連接就不夠高效。
    我的做法是這樣的:在iBatis中使用SqlMap從表中將數(shù)據(jù)取出,此時(shí)不使用數(shù)據(jù)表的連接。
    package com.demo;
    public class Book {
          
    /* 省略了getter和setter方法 */
            private int id;
            
    private String name;
            
    private int categoryId;
            
    private String author;
    }


    package com.demo;

    public class Category {
           
    private static Map<Integer, Category> cacheMap;

            
    /* 省略了這兩個(gè)屬性的getter和setter方法 */

            
    private int id;
            
    private String name;
           
    public static Category getCategory(int id) {
                 init();
                
    return cacheMap.get(id);
            }
     
            
    public static Map<Integer, Category> getCategoryMap() {
                init();
               
    return cacheMap();
            }

           
    private init() {
                
    if ( cacheMap != null ) return;

                
    // the code to load category from datebase
                
    // 在這里為了演示的需要,使用以下代碼

                 cacheMap 
    = new HashMap<Integer, Category>();
                 Category category 
    = new Category();
                 category.setId(
    1);
                 category.setName(
    "Fiction");
                 cacheMap.put(
    1, category);
     
                 category 
    = new Category();
                 category.setId(
    2);
                 category.setName(
    "Cartoon");
            }
    }



    package com.demo;

    public class BookAction  {
            
    /* 省略了屬性的getter和setter方法 */
            Book book;

            
    public String execute() {
                    book 
    = new Book();
                    book.setId(
    1);
                    book.setName(
    "Thinking in java");
                    book.setCategoryId(
    1);
                    bookList.add(book);
                    
                    
    return SUCCESS;                
            }
    }

    JSP:
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
     
    <head>
      
    <s:head />
     
    </head>

     
    <body>

      
    <table border="1">
        
    <tr>
         
    <td>
          
    <s:text name="page.label.userName" />
         
    </td>
         
    <td>
          
    <s:property value="book.name" />
         
    </td>
        
    </tr>
        
    <tr>
         
    <td>
          
    <s:text name="page.label.category" />
         
    </td>
         
    <td>
           
    <s:property value="@com.demo.Category@getCategory(book.categoryId).getName()"/></td>
        
    </tr>
     
    </body>
    </html>



    posted @ 2008-03-17 12:09 云自無心水自閑 閱讀(5800) | 評論 (8)編輯 收藏

    2008年2月24日,F(xiàn)lex3正式發(fā)布了。分為標(biāo)準(zhǔn)版和Professional版。
    兩者差別不大,標(biāo)準(zhǔn)版沒有advanced datagrid和一些性能分析工具。(advanced datagrid)可是我期盼好久的功能了。

    另外,價(jià)錢也是相當(dāng)?shù)牟环啤tandard is $249 US, Professional costs $699.
    此外,還可以選擇從flex2升級上去:升級到Standard的話,99美元,升級到professional要299美元。

    posted @ 2008-02-27 06:52 云自無心水自閑 閱讀(775) | 評論 (0)編輯 收藏

    Tomcat在后臺重起后,所有的session失效。如果客戶端繼續(xù)點(diǎn)擊了一個(gè)菜單項(xiàng),發(fā)出一個(gè)請求。會得到一個(gè)exception。

    這時(shí)候,可以定義一個(gè)名為:sessionTimeout的global results

    <result name="sessionTimeout">/WEB-INF/pages/session_timeout.jsp</result>

    這樣,所有Action的session timeout都會被定向到指定的頁面

    posted @ 2008-02-21 12:03 云自無心水自閑 閱讀(1969) | 評論 (2)編輯 收藏

    最近嘗試用extjs來展示樹狀菜單。著實(shí)花了一番功夫。樹狀菜單的菜單項(xiàng)需要?jiǎng)討B(tài)加載,而目前版本的extjs中只支持JSON格式的數(shù)據(jù)。查了一些資 料,決定使用struts2的json-plugin。首先按照例子做了一個(gè),但是結(jié)果就是不成功,界面上只出來了一個(gè)js中生成的root節(jié)點(diǎn),不能加 載從后臺生成的數(shù)據(jù)。研究后發(fā)現(xiàn)是數(shù)據(jù)格式有問題。使用json-plugin生成的數(shù)據(jù)格式如下:
    {"cls":"folder","id":10,"leaf":false,"children":[{"cls":"file","id":11,"leaf":true,"children":null,"text":"S600"},{"cls":"file","id":12,"leaf":true,"children":null,"text":"SLK200"}],"text":"Benz"}
    而extjs需要的數(shù)據(jù)格式如下:
    [{"cls":"folder","id":10,"leaf":false,"children":[{"cls":"file","id":11,"leaf":true,"children":null,"text":"S600"},{"cls":"file","id":12,"leaf":true,"children":null,"text":"SLK200"}],"text":"Benz"}]
    區(qū)別很小,就只相差最外面的兩個(gè)方括號。但是少了這兩個(gè)方括號,在json中,含義迥然不同,前者表示一個(gè)對象,而后者表示一個(gè)數(shù)組。而extjs中 tree的dataloader需要的數(shù)據(jù)必須是一個(gè)數(shù)組。而這樣的數(shù)據(jù)格式是json-plugin自動生成的,無法改變。所以,我最后放棄了json -plugin,轉(zhuǎn)而使用json-lib來解決這個(gè)問題。
    1. 下載json-lib, http://json-lib.sourceforge.net/
    2. lib目錄下的jar文件清單:
    commons-beanutils-1.7.0.jar
    commons-collections-3.2.jar
    commons-digester-1.6.jar
    commons-lang-2.3.jar
    commons-logging-1.1.jar
    dom4j-1.6.1.jar
    ezmorph-1.0.4.jar
    freemarker-2.3.8.jar
    javassist-3.8.1.jar
    json-lib-2.2.1-jdk15.jar
    log4j-1.2.13.jar
    ognl-2.6.11.jar
    struts2-core-2.0.11.jar
    xml-apis-1.0.b2.jar
    xwork-2.0.4.jar


    首先配置web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
      xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation
    ="http://java.sun.com/xml/ns/j2ee
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    >
      
    <welcome-file-list>
        
    <welcome-file>index.jsp</welcome-file>
      
    </welcome-file-list>
      
    <filter>
        
    <filter-name>struts2</filter-name>
        
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
      
    </filter>

      
    <filter-mapping>
        
    <filter-name>struts2</filter-name>
        
    <url-pattern>/*</url-pattern>
      
    </filter-mapping>
    </web-app>

    然后是struts.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd"
    >
       
    <struts>
        
    <constant name="struts.devMode" value="true"/>
        
    <constant name="struts.i18n.encoding" value="UTF-8"/>
        
    <package name="person" extends="struts-default">
            
    <action name="menus" method="execute" class="com.lab.MenuAction">
                
    <result>/menu.jsp</result>
            
    </action>
        
    </package>
    </struts>

    3. 樹的節(jié)點(diǎn)模型(省略了getter,setter)
    public class Menu {
        
    private int id;
        
    private String text;
        
    private boolean leaf;
        
    private String cls;
        
    private List<Menu> children;
    }

    4. action
    package com.lab;

    import java.util.ArrayList;
    import java.util.List;

    import net.sf.json.JSONArray;

    public class MenuAction {
        
    private String menuString;
       
        
    private List<Menu> menus;
       
        
    public String execute() {

            menus 
    = new ArrayList<Menu>();
           
            Menu benz 
    = new Menu();
            benz.setText(
    "Benz");
            benz.setCls(
    "folder");
            benz.setLeaf(
    false);
            benz.setId(
    10);
            menus.add(benz);
           
            List
    <Menu> benzList = new ArrayList<Menu>();
            benz.setChildren(benzList);
           
            Menu menu;
            menu 
    = new Menu();
            menu.setText(
    "S600");
            menu.setCls(
    "file");
            menu.setLeaf(
    true);
            menu.setId(
    11);
            benzList.add(menu);
            menu 
    = new Menu();
            menu.setText(
    "SLK200");
            menu.setCls(
    "file");
            menu.setLeaf(
    true);
            menu.setId(
    12);
            benzList.add(menu);
           
            Menu bmw 
    = new Menu();
            bmw.setText(
    "BMW");
            bmw.setCls(
    "folder");
            bmw.setLeaf(
    false);
            bmw.setId(
    20);
            menus.add(bmw);
           
            List
    <Menu> bmwList = new ArrayList<Menu>();
            bmw.setChildren(bmwList);
           
            menu 
    = new Menu();
            menu.setText(
    "325i");
            menu.setCls(
    "file");
            menu.setLeaf(
    true);
            menu.setId(
    21);
            bmwList.add(menu);
           
            menu 
    = new Menu();
            menu.setText(
    "X5");
            menu.setCls(
    "file");
            menu.setLeaf(
    true);
            menu.setId(
    22);
            bmwList.add(menu);
           
            JSONArray jsonObject 
    = JSONArray.fromObject(menus);
            
    try {
                menuString 
    = jsonObject.toString();
            } 
    catch (Exception e) {
                menuString 
    = "ss";
            }

            
    return "success";
        }

        
    public String getMenuString() {
            
    return menuString;
        }

        
    public void setMenuString(String menuString) {
            
    this.menuString = menuString;
        }
    }

    5. menu.jsp
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <s:property value="menuString" escape="false"/>

    6. html頁面和js
    我使用的就是extjs的example中的reorder.html和reorder.js,更改了reorder.js中treeloader的dataurl: menus.action
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Reorder TreePanel</title>
    <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css" />

        
    <!-- GC -->
         
    <!-- LIBS -->
         
    <script type="text/javascript" src="extjs/adapter/ext/ext-base.js"></script>
         
    <!-- ENDLIBS -->
     
        
    <script type="text/javascript" src="extjs/ext-all.js"></script>
    <script type="text/javascript" src="reorder.js"></script>

    <!-- Common Styles for the examples -->
    <link rel="stylesheet" type="text/css" href="extjs/resources/css/example.css" />
    </head>
    <body>
    <script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->
    <h1>Drag and Drop ordering in a TreePanel</h1>
    <p>This example shows basic drag and drop node moving in a tree. In this implementation there are no restrictions and 
    anything can be dropped anywhere except appending to nodes marked 
    &quot;leaf&quot; (the files). <br></p>
    <p>Drag along the edge of the tree to trigger auto scrolling while performing a drag and drop.</p>
    <p>In order to demonstrate drag and drop insertion points, sorting was <b>not</b> enabled.</p>
    <p>The data for this tree is asynchronously loaded with a JSON TreeLoader.</p>
    <p>The js is not minified so it is readable. See <href="reorder.js">reorder.js</a>.</p>

    <div id="tree-div" style="overflow:auto; height:300px;width:250px;border:1px solid #c3daf9;"></div>

    </body>
    </html>



    js:
    /*
     * Ext JS Library 2.0.1
     * Copyright(c) 2006-2008, Ext JS, LLC.
     * licensing@extjs.com
     *
     * http://extjs.com/license
     
    */

    Ext.onReady(
    function(){
        
    // shorthand
        var Tree = Ext.tree;
       
        
    var tree = new Tree.TreePanel({
            el:'tree
    -div',
            autoScroll:
    true,
            animate:
    true,
            enableDD:
    true,
            containerScroll: 
    true,
            loader: 
    new Tree.TreeLoader({
                dataUrl:'http:
    //localhost:8080/lab/menus.action'
            })
        });

        
    // set the root node
        var root = new Tree.AsyncTreeNode({
            text: 'Ext JS',
            draggable:
    false,
            id:'source'
        });
        tree.setRootNode(root);

        
    // render the tree
        tree.render();
        root.expand();
    });

    我已經(jīng)上傳了完整的War文件(包含所有源代碼),見:Extjs Tree + JSON + Struts2 的所有示例源代碼和war文件下載

    posted @ 2008-02-19 09:27 云自無心水自閑 閱讀(43666) | 評論 (49)編輯 收藏

    Struts2中支持使用List在頁面和Action之間直接傳遞表格數(shù)據(jù)。下面是一個(gè)示例:
    public class Person {
    int id;
    String name;
    int age;
    float height;
    }

    這是一個(gè)POJO,getter和setting省略了。

    action中可以這樣使用:

    public class MyAction {
    public List getPeopleList() { … }
    public void setPeopleList( List peopleList ) { … }

    }
    在我們使用Person類之前,需要添加一個(gè)配置文件,MyAction-conversion.properties,把這個(gè)文件和MyAction放在一起。
    這個(gè)文件里只有一行內(nèi)容:
    Element_peopleList=Person
    前綴Element_是一個(gè)常量,表明等號左邊的表達(dá)式中跟在這個(gè)常量后面的是Action類中一個(gè)List類型的字段名。
    等號右邊的表達(dá)式是全類名(包含package)
    下面是一個(gè)頁面的代碼片段:
    <s:form action="update" method="post" >
    <s:iterator value="peopleList" status="stat">
    <s:hidden
    name="peopleList[%{#stat.index}].id"
    value
    ="%{peopleList[#stat.index].id}"/>
    <s:textfield label="Name"
    name
    ="peopleList[%{#stat.index}].name"
    value
    ="%{peopleList[#stat.index].name}"/>
    <s:textfield label="Age"
    name
    ="peopleList[%{#stat.index}].age"
    value
    ="%{peopleList[#stat.index].age}" />
    <s:textfield label="Height"
    name
    ="peopleList[%{#stat.index}].height"
    value
    ="%{peopleList[#stat.index].height}"/>
    <br/>
    </s:iterator>
    <s:submit value="Update"/>
    </s:form>


    使用這段代碼,Struts2會創(chuàng)建一個(gè)Person類的ArrayList,并且用setPersonList這個(gè)方法把頁面表格中的值傳遞回Action。
    如果你是想從用戶界面中動態(tài)創(chuàng)建列表值,需要允許Struts2給列表中類的實(shí)例。那么在配置文件MyAction-conversion.properties中添加一行:
    CreateIfNull_peopleList = true

    posted @ 2008-02-12 21:06 云自無心水自閑 閱讀(3282) | 評論 (2)編輯 收藏

         摘要: Struts2和Struts相比,一個(gè)重大改進(jìn)就是支持Ajax。 本文主要看一下Struts2中的Div是如何用來輸出Ajax結(jié)果,其中主要使用了Dojo。 首先,我們先創(chuàng)建一個(gè)簡單的用例,在這個(gè)用例中,將在屏幕上顯示一個(gè)用戶列表,點(diǎn)擊列表中的userid時(shí),列表的下方將顯示用戶的詳細(xì)信息,顯示用戶詳細(xì)信息的這個(gè)步驟我們將使用Ajax。 一、創(chuàng)建web.xml <?xml v...  閱讀全文

    posted @ 2008-02-10 20:56 云自無心水自閑 閱讀(12259) | 評論 (8)編輯 收藏

    僅列出標(biāo)題
    共29頁: First 上一頁 13 14 15 16 17 18 19 20 21 下一頁 Last 
    主站蜘蛛池模板: 亚洲精品成人无码中文毛片不卡| 亚洲欧洲日产国码www| 亚洲婷婷五月综合狠狠爱| 亚洲国产精品久久久久久| a级毛片高清免费视频| 日韩插啊免费视频在线观看 | 最好免费观看高清在线| 久久免费的精品国产V∧| 中文字幕精品亚洲无线码一区应用| 深夜特黄a级毛片免费播放| 亚洲成人影院在线观看| 亚洲一级毛片中文字幕| www成人免费观看网站| 亚洲五月午夜免费在线视频| 中国一级全黄的免费观看| 国产麻豆视频免费观看| 亚洲第一区二区快射影院| 国色精品va在线观看免费视频| 亚洲乱码精品久久久久..| 免费国产叼嘿视频大全网站| 国产精品免费电影| 亚洲国产精品一区二区久| 国产精品免费观看久久| 男人的天堂av亚洲一区2区| 亚洲精品视频在线观看免费| av在线亚洲欧洲日产一区二区| 久久久精品国产亚洲成人满18免费网站| 成人免费午夜视频| 亚洲日韩乱码中文无码蜜桃臀| 成年女人午夜毛片免费看| 国产亚洲综合一区二区三区| 亚洲精品高清国产一线久久| 大学生一级毛片免费看| 四虎精品免费永久免费视频| 99久久精品国产亚洲| 成人久久免费网站| 亚洲va在线va天堂成人| 亚洲精品国产精品乱码不卞| 永久在线免费观看| 九九九国产精品成人免费视频| 噜噜噜亚洲色成人网站∨|