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

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

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

    隨筆 - 312, 文章 - 14, 評(píng)論 - 1393, 引用 - 0
    數(shù)據(jù)加載中……

    Struts2教程2:處理一個(gè)form多個(gè)submit

    本文為原創(chuàng),如需轉(zhuǎn)載,請(qǐng)注明作者和出處,謝謝!

    上一篇:Struts2教程1:第一個(gè)Struts2程序

      在很多Web應(yīng)用中,為了完成不同的工作,一個(gè)HTML form標(biāo)簽中可能有兩個(gè)或多個(gè)submit按鈕,如下面的代碼所示:

    <html action=""  method="post">
     
    <input type="submit" value="保存" />
    <input type="submit" value="打印" />
    </html>

    由于在<form>中的多個(gè)提交按鈕都向一個(gè)action提交,使用Struts2 Actionexecute方法就無(wú)法判斷用戶(hù)點(diǎn)擊了哪一個(gè)提交按鈕。如果大家使用過(guò)Struts1.x就會(huì)知道在Struts1.2.9之前的版本需要使用一個(gè)LookupDispatchAction動(dòng)作來(lái)處理含有多個(gè)submitform。但使用LookupDispatchAction動(dòng)作需要訪(fǎng)問(wèn)屬性文件,還需要映射,比較麻煩。從Struts1.2.9開(kāi)始,加入了一個(gè)EventDispatchAction動(dòng)作。這個(gè)類(lèi)可以通過(guò)java反射來(lái)調(diào)用通過(guò)request參數(shù)指定的動(dòng)作(實(shí)際上只是判斷某個(gè)請(qǐng)求參數(shù)是不存在,如果存在,就調(diào)用在action類(lèi)中和這個(gè)參數(shù)同名的方法)。使用EventDispatchAction必須將submitname屬性指定不同的值以區(qū)分每個(gè)submit。而在Struts2中將更容易實(shí)現(xiàn)這個(gè)功能。

    當(dāng)然,我們也可以模擬EventDispatchAction的方法通過(guò)request獲得和處理參數(shù)信息。但這樣比較麻煩。在Struts2中提供了另外一種方法,使得無(wú)需要配置可以在同一個(gè)action類(lèi)中執(zhí)行不同的方法(默認(rèn)執(zhí)行的是execute方法)。使用這種方式也需要通過(guò)請(qǐng)求參來(lái)來(lái)指定要執(zhí)行的動(dòng)作。請(qǐng)求參數(shù)名的格式為

    action!method.action

    注:由于Struts2只需要參數(shù)名,因此,參數(shù)值是什么都可以。

    下面我就給出一個(gè)實(shí)例程序來(lái)演示如何處理有多個(gè)submitform

    【第1步】實(shí)現(xiàn)主頁(yè)面(more_submit.jsp)


    <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
      
    <head>
        
    <title>My JSP 'hello.jsp' starting page</title>
      
    </head>
      
      
    <body>
        
    <s:form action="submit.action" >
            
    <s:textfield name="msg" label="輸入內(nèi)容"/>  
            
    <s:submit name="save" value="保存" align="left" method="save"/>
            
    <s:submit name="print" value="打印" align="left" method="print" />      
        
    </s:form>
      
    </body>
    </html>

    more_submit.jsp中有兩個(gè)submit:保存和打印。其中分別通過(guò)method屬性指定了要調(diào)用的方法:saveprint。因此,在Action類(lèi)中必須要有saveprint方法。

    【第2步】實(shí)現(xiàn)Action類(lèi)(MoreSubmitAction


    package action;

    import javax.servlet.http.*;

    import com.opensymphony.xwork2.ActionSupport;
    import org.apache.struts2.interceptor.*;

    public class MoreSubmitAction extends ActionSupport implements ServletRequestAware
    {
        
    private String msg;
        
    private javax.servlet.http.HttpServletRequest request;
        
    // 獲得HttpServletRequest對(duì)象
        public void setServletRequest(HttpServletRequest request)
        {
            
    this.request = request;
        }
        
    // 處理save submit按鈕的動(dòng)作
        public String save() throws Exception
        {
            request.setAttribute(
    "result""成功保存[" + msg + "]");
            
    return "save";
        }

        
    // 處理print submit按鈕的動(dòng)作
        public String print() throws Exception
        {
            request.setAttribute(
    "result""成功打印[" + msg + "]");
            
    return "print";
        }
        
    public String getMsg()
        {
            
    return msg;
        }

        
    public void setMsg(String msg)
        {
            
    this.msg = msg;
        }
    }

    上面的代碼需要注意如下兩點(diǎn):

    saveprint方法必須存在,否則會(huì)拋出java.lang.NoSuchMethodException異常。

    Struts2 Action動(dòng)作中的方法和Struts1.x Actionexecute不同,只使用Struts2 Action動(dòng)作的execute方法無(wú)法訪(fǎng)問(wèn)request對(duì)象,因此,Struts2 Action類(lèi)需要實(shí)現(xiàn)一個(gè)Struts2自帶的攔截器來(lái)獲得request對(duì)象,攔截器如下:

    org.apache.struts2.interceptor. ServletRequestAware

    【第3步】配置Struts2 Action

    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>    
        
    <package name="demo" extends="struts-default" >
            
    <action name="submit"  class="action.MoreSubmitAction">
                
    <result name="save" >
                    /result.jsp
                
    </result>
                
    <result name="print">
                    /result.jsp
                
    </result>
            
    </action>    
        
    </package>    
    </struts>

    【第4步】編寫(xiě)結(jié)果頁(yè)(result.jsp


    <%@ page pageEncoding="GBK"%>
    <html>
      
    <head>
        
    <title>提交結(jié)果</title>
      
    </head>
      
    <body>
        
    <h1>${result}</h1>
      
    </body>
    </html>

    result.jsp中將在saveprint方法中寫(xiě)到request屬性中的執(zhí)行結(jié)果信息取出來(lái),并輸出到客戶(hù)端。

    啟動(dòng)Tomcat后,在IE中執(zhí)行如下的URL來(lái)測(cè)試程序:

        http://localhost:8080/moresubmit/more_submit.jsp

    大家也可以直接使用如下的URL來(lái)調(diào)用saveprint方法:

    調(diào)用save方法:http://localhost:8080/moresubmit/submit!save.action

    調(diào)用print方法:http://localhost:8080/moresubmit/submit!print.action

    源代碼:http://www.itpub.net/attachment.php?aid=520773


    下一篇:Struts2教程3:struts.xml常用配置解析





    Android開(kāi)發(fā)完全講義(第2版)(本書(shū)版權(quán)已輸出到臺(tái)灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱(chēng):李寧_Lining

    posted on 2008-04-16 09:18 銀河使者 閱讀(53343) 評(píng)論(41)  編輯  收藏 所屬分類(lèi): Struts2 原創(chuàng)

    評(píng)論

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    使用dmi也可以實(shí)現(xiàn).另外問(wèn)一下result里面的name屬性可以自定義.有什么原則?
    2008-07-19 21:36 | aidirac

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    result里面的屬性可以是任何值,不能是execute,還有其它幾個(gè)actionsupport定義的方法名,否則會(huì)拋出異常,
    2008-07-19 21:56 | 銀河使者

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    實(shí)現(xiàn)多submit的方法非常多,這只是其中之一,在struts1.2.9以后的struts1.x版本中提供了一個(gè)action來(lái)處理,原理是通過(guò)判斷某個(gè)請(qǐng)求參數(shù)是否為null來(lái)處理(這個(gè)請(qǐng)求參數(shù)就是某個(gè)submit的name屬性值)
    2008-07-19 21:58 | 銀河使者

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit[未登錄](méi)  回復(fù)  更多評(píng)論   

    public class MoreSubmitAction extends ActionSupport implements ServletRequestAware

    這個(gè)就是一個(gè)action處理不同的請(qǐng)求,類(lèi)似于strtus1.2中的dispachaction 呵呵o(∩_∩)o... 還有你說(shuō)的多個(gè)submit大題小做了 還有更簡(jiǎn)單的方法 可以把<input type="submit" value="打印"> 改成不同的按鈕,在onclick事件中動(dòng)態(tài)改變action就可以了 超簡(jiǎn)單 <input type="button" value="打印" onclick="print();">

    <script>
    function print(){
    document.forms.testForm.action="你要轉(zhuǎn)到的action";
    document.forms.testForm.submit();//提交表單
    }
    </script>

    你的教程寫(xiě)的很棒,支持樓主額!贊一個(gè),狂頂!!!!!!!!(*^__^*) 嘻嘻……
    2008-08-18 01:55 | 小毅

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    沒(méi)錯(cuò),用javascript也是一種方法。不過(guò)我的教程只在演示struts 2關(guān)于這方面的功能,并不是為了實(shí)現(xiàn)而實(shí)現(xiàn)。 用javascript適合于所有的語(yǔ)言、所有的web系統(tǒng)。
    2008-08-18 09:24 | 銀河使者

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    學(xué)習(xí)了
    的確很好啊!!
    2008-10-22 16:06 | lyshyhaungli

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    感謝樓主!一直支持!
    2008-11-12 15:28 | luo

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    x寫(xiě)的 很好
    2008-11-26 14:07 | bb

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    可能在按鈕的action屬性來(lái)指定要提交的東西!
    2008-12-17 10:53 | zhongmingweixp

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    寫(xiě)的很好, 頂,頂,頂,頂,頂,頂,頂,頂,頂,頂,頂.........
    2009-01-19 13:44 | java_xu

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    本例中依然有編碼問(wèn)題,在表單中填入中文,提交后無(wú)法顯示。我添加了一個(gè)filter進(jìn)行調(diào)用request.setCharacterEncoding("GBK") , 并且將該filter配置在FilterDispatcher之前,但是依然無(wú)效。不解,希望博主指教。
    2009-01-21 17:37 | Hadis

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    @Hadis
    是這樣的,Struts 2默認(rèn)采用了UTF-8編碼(可以在struts.properties或struts.xml文件中修改這一設(shè)置),而我用的是GBK,把你的程序都改成UTF-8試試。實(shí)在不行,把你做的例子發(fā)給我,我的mail是asklining@126.com,我看看。發(fā)過(guò)來(lái)時(shí)別忘了留言。
    2009-01-21 17:49 | 銀河使者

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    我把more_submit.jsp的pageEncoding改成UTF-8 可以顯示中文了
    但是為什么這個(gè)時(shí)候使用過(guò)濾器設(shè)置request的編碼無(wú)效了呢?
    2009-01-21 18:49 | Hadis

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    @Hadis
    是這樣的,過(guò)濾器是對(duì)Servlet的,而Struts 2是通過(guò)攔截器來(lái)處理action的,當(dāng)客戶(hù)端發(fā)送請(qǐng)求時(shí),首先這個(gè)請(qǐng)求會(huì)被struts 2的過(guò)濾器攔截(在web.xml文件中可以看到處理action的struts 2過(guò)濾器),并進(jìn)行分析,如果是action,則進(jìn)行Struts 2的處理流程,也就是調(diào)用相應(yīng)的struts 2攔截器,最后會(huì)調(diào)用action類(lèi)的execute方法。在這個(gè)過(guò)程中,和web.xml中配置的其他過(guò)濾器一點(diǎn)關(guān)系都沒(méi)有,因?yàn)樵趙eb.xml文件中配置的過(guò)濾器并不會(huì)過(guò)濾action,而處理action的是由struts2的攔截器完成的。

    如果客戶(hù)端發(fā)送的是非action的請(qǐng)求,則struts2會(huì)將其交由Servlet引擎來(lái)處理,這時(shí)過(guò)濾器才有效。

    如果非要在程序中設(shè)置request的編碼,可以在struts 2的攔截器中設(shè)置。
    2009-01-21 19:20 | 銀河使者

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    filter不是針對(duì)請(qǐng)求url的嗎?針對(duì)符合filter-mapping的url進(jìn)行處理,當(dāng)鏈上的所有fliter都處理結(jié)束的時(shí)候發(fā)送到請(qǐng)求的servlet,對(duì)吧?你的意思是不是說(shuō),因?yàn)轫?yè)面請(qǐng)求的資源是一個(gè)action,所以struts2的filter得到請(qǐng)求之后并不發(fā)送到過(guò)濾鏈上。struts2是如何保證自己的filter優(yōu)先處理請(qǐng)求呢?我還有好多問(wèn)題想請(qǐng)教如果方便的話(huà)希望博主可以加我的QQ:89477048
    2009-01-21 21:04 | Hadis

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    "Filters with matching URL patterns are placed in the chain in the order in which they are declared in the DD"這一句是我從head first上面copy的,我把自己的requestEncodingFliter聲明在struts2的FilterDispatcher前面,這樣應(yīng)該是我的過(guò)濾器先處理請(qǐng)求將之編碼改變?yōu)镚BK,為什么是無(wú)效的呢?
    2009-01-21 21:12 | Hadis

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    @Hadis

    一般FilterDispatcher可設(shè)為"/*"以結(jié)果所有的請(qǐng)求,當(dāng)然,也可以設(shè)為*.action,只截獲action請(qǐng)求,

    不知你客戶(hù)端的jsp頁(yè)面是GBK,還是utf-8,就算你在自己的過(guò)濾器中設(shè)了GBK,在執(zhí)行FilterDispathcer時(shí)仍然按著Struts 2的設(shè)置來(lái)處理,就是說(shuō),還是會(huì)設(shè)成utf-8。你可以在自己的過(guò)濾器中在設(shè)置完request的gbk編碼后,使用request.getParameter方法來(lái)自己讀一下請(qǐng)求參數(shù)的值,看看是不是亂碼!
    2009-01-21 21:21 | 銀河使者

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    十分感謝博主的提示~!!
    2009-01-21 21:54 | Hadis

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit[未登錄](méi)  回復(fù)  更多評(píng)論   

    希望能把標(biāo)簽生成的html和js部分貼出來(lái)就好,這樣更方便理解
    2009-03-12 23:05 | yxy

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    @yxy
    這個(gè)沒(méi)什么不好理解的,只是通過(guò)url來(lái)通知服務(wù)端調(diào)用哪個(gè)方法。
    2009-03-13 08:38 | 銀河使者

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    sdsfg

    2009-09-09 15:49 | f

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    教程非常好!
    2010-03-09 10:19 | man

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit[未登錄](méi)  回復(fù)  更多評(píng)論   

    很通俗,很好,很容易看懂,多謝
    2010-07-20 20:53 | 楓葉

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    org.apache.struts2.interceptor. ServletRequestAware

    2010-07-26 15:36 | 淘寶網(wǎng)女裝皇冠店

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    博主,問(wèn)一個(gè)弱智問(wèn)題,${result}為什么取不到屬性值?
    2010-11-03 10:52 | micahel

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    buxing a :ljh0242@163.com
    2011-03-22 09:28 | ljj

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    問(wèn)一下,如果想使用超鏈接,通過(guò)js提交form跳轉(zhuǎn)該如何寫(xiě)呢,我在firefox里試可以,但在ie中卻不行,能進(jìn)入action,但頁(yè)面只是刷一下,沒(méi)有跳到相應(yīng)的頁(yè)面
    2011-04-27 10:51 | ssjtt

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    真的是個(gè)好東西 啊 謝謝樓主了啊啊
    2011-05-31 21:40 | ealge

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    轉(zhuǎn)到的result頁(yè)面依然顯示是${result}..為什么呢?
    2011-08-31 20:15 | ysj

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    Struts has detected an unhandled exception:

    Messages: No result defined for action ygh.struts.moresubmit.action.MoreSubmitAction and result success

    2011-11-13 09:48 | ygh

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    @銀河使者
    你可以使用<c:out value="${result}" />
    2011-11-24 09:39 | 刀傷

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    對(duì)樓主把提交的方法寫(xiě)在jsp標(biāo)簽里表示不滿(mǎn)。
    <s:submit name="save" value="保存" align="left" method="save"/>
    <s:submit name="print" value="打印" align="left" method="print" />



    我覺(jué)得寫(xiě)在這里更合理些
    <struts>
    <package name="demo" extends="struts-default" >
    <action name="submit" class="action.MoreSubmitAction" method = " 這里 ">
    <result name="save" >
    2012-06-21 14:29 | lukia

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    學(xué)習(xí)了
    2013-09-10 10:37 | 魚(yú)兒

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    樓主已經(jīng)寫(xiě)得很詳細(xì)了, 補(bǔ)充一點(diǎn):
    可以帶參數(shù)調(diào)用print方法:
    http://localhost:8080/moresubmit/submit!print.action?msg=參數(shù)
    這樣更便于調(diào)試
    2014-02-07 16:33 | 呂小布

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    為什么我照著做,返回的是No result defined for action action.MoreSubmitAction and result success
    2014-03-07 22:07 | Fylee

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    不錯(cuò)
    2014-04-02 00:12 | shunshine

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    博主你好,如果method是用在jsp表單那執(zhí)行會(huì)出現(xiàn)錯(cuò)誤,應(yīng)該是沒(méi)有傳回相應(yīng)的method,我將method放在struts.xml的action里面并指定一個(gè)method就可以實(shí)現(xiàn),不過(guò)兩個(gè)按鈕只顯示一個(gè)值
    2014-04-02 11:09 | anymore

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    博主您好,請(qǐng)教個(gè)問(wèn)題。

    調(diào)用save方法:http://localhost:8080/moresubmit/submit!save.action

    我配置的是/* 不是*.action

    請(qǐng)問(wèn)我直接地址欄輸入應(yīng)該怎么寫(xiě)?
    2014-06-04 11:34 | yoursair

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    @ygh
    哥們,我之前也報(bào)你這個(gè)錯(cuò),后經(jīng)發(fā)現(xiàn)<constant name="struts.enable.DynamicMethodInvocation" value="true" /> value必須要是true,如果是false,就不能動(dòng)態(tài)配置了 所以報(bào)錯(cuò)
    2014-06-24 11:05 | clear

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    @clear
    請(qǐng)問(wèn)這個(gè)代碼是寫(xiě)在哪里呢?struts.xml?
    2014-08-13 11:24 | leietal

    # re: Struts2教程2:處理一個(gè)form多個(gè)submit  回復(fù)  更多評(píng)論   

    @clear
    加上去已解決了,在struts.xml文件中打不出這個(gè)標(biāo)簽。。。
    2014-08-13 11:43 | leietal
    主站蜘蛛池模板: 羞羞视频网站免费入口| AAAAA级少妇高潮大片免费看| 黄色短视频免费看| 亚洲成Av人片乱码色午夜| 无码人妻一区二区三区免费视频| 日本一区二区免费看| 久久精品亚洲中文字幕无码网站 | 亚洲三级中文字幕| 成人au免费视频影院| 美女被暴羞羞免费视频| 亚洲男人的天堂网站| 亚洲日韩欧洲乱码AV夜夜摸| 18禁网站免费无遮挡无码中文| 亚洲AV无码一区二区三区牲色| 亚洲国产成人五月综合网 | 一级毛片aa高清免费观看| 国产自偷亚洲精品页65页| 中文字幕乱码免费看电影| 久久亚洲AV成人出白浆无码国产| 亚洲视频免费在线观看| 亚洲天堂免费在线| 免费少妇a级毛片人成网| 18禁在线无遮挡免费观看网站| 久久亚洲日韩看片无码| 性感美女视频免费网站午夜 | 亚洲一区二区三区香蕉| 国产禁女女网站免费看| v片免费在线观看| 综合亚洲伊人午夜网 | 亚洲精品伦理熟女国产一区二区 | 日韩视频免费在线| 国产羞羞的视频在线观看免费| 亚洲黑人嫩小videos| 国产精品亚洲A∨天堂不卡 | 日本视频在线观看永久免费| 未满十八私人高清免费影院| 美女视频黄频a免费大全视频| 亚洲色精品VR一区区三区| 亚洲裸男gv网站| 国产va精品免费观看| 久久免费观看视频|