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

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

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

    posts - 4,  comments - 13,  trackbacks - 0
     

    Java Web開發人員可以使用Apache文件上傳組件來接收瀏覽器上傳的文件,該組件由多個類共同組成,但是,對于使用該組件來編寫文件上傳功能的Java Web開發人員來說,只需要了解和使用其中的三個類:DiskFileUploadFileItemFileUploadException。這三個類全部位于org.apache.commons.fileupload包中。

     查看API文檔

    在準備實驗環境時獲得的commons-fileupload-1.0.zip文件的解壓縮目錄中可以看到一個docs的子目錄,其中包含了Apache文件上傳組件中的各個API類的幫助文檔,從這個文檔中可以了解到各個API類的使用幫助信息。打開文件上傳組件API幫助文檔中的index.html頁面,在左側分欄窗口頁面中列出了文件上傳組件中的各個API類的名稱,在右側分欄窗口頁面的底部列出了一段示例代碼,如圖1.2所示。

    1.2

    讀者不需要逐個去閱讀圖1.2中列出的各個API類的幫助文檔,而應該以圖1.2中的示例代碼為線索,以其中所使用到的類為入口點,按圖索驥地進行閱讀,對于示例代碼中調用到的各個API類的方法則應重點掌握。



    1. DiskFileUpload

    DiskFileUpload類是Apache文件上傳組件的核心類,應用程序開發人員通過這個類來與Apache文件上傳組件進行交互。但現在Apache建議使用ServletFileUpload,兩個類的方法類似。下面介紹DiskFileUpload類中的幾個常用的重要方法。

    1.1setSizeMax方法

    setSizeMax方法用于設置請求消息實體內容的最大允許大小,以防止客戶端故意通過上傳特大的文件來塞滿服務器端的存儲空間,單位為字節。其完整語法定義如下:

         public void setSizeMaxlong sizeMax

    如果請求消息中的實體內容的大小超過了setSizeMax方法的設置值,該方法將會拋出FileUploadException異常。

    1.2setSizeThreshold方法

    Apache文件上傳組件在解析和處理上傳數據中的每個字段內容時,需要臨時保存解析出的數據。因為Java虛擬機默認可以使用的內存空間是有限的(筆者測試不大于100M),超出限制時將會發生“java.lang.OutOfMemoryError”錯誤,如果上傳的文件很大,例如上傳800M的文件,在內存中將無法保存該文件內容,Apache文件上傳組件將用臨時文件來保存這些數據;但如果上傳的文件很小,例如上傳600個字節的文件,顯然將其直接保存在內存中更加有效。setSizeThreshold方法用于設置是否使用臨時文件保存解析出的數據的那個臨界值,該方法傳入的參數的單位是字節。其完整語法定義如下:

    public void setSizeThreshold(int sizeThreshold)

    1.3. setRepositoryPath方法

    setRepositoryPath方法用于設置setSizeThreshold方法中提到的臨時文件的存放目錄,這里要求使用絕對路徑。其完整語法定義如下:

    public void setRepositoryPath(String repositoryPath)

    如果不設置存放路徑,那么臨時文件將被儲存在"java.io.tmpdir"這個JVM環境屬性所指定的目錄中,tomcat 5.5.9將這個屬性設置為了“<tomcat安裝目錄>/temp/”目錄。

    1.4. parseRequest方法

    parseRequest 方法是DiskFileUpload類的重要方法,它是對HTTP請求消息進行解析的入口方法,如果請求消息中的實體內容的類型不是“multipart/form-data”,該方法將拋出FileUploadException異常。parseRequest 方法解析出FORM表單中的每個字段的數據,并將它們分別包裝成獨立的FileItem對象,然后將這些FileItem對象加入進一個List類型的集合對象中返回。parseRequest 方法的完整語法定義如下:

    public List parseRequest(HttpServletRequest req)

    parseRequest 方法還有一個重載方法,該方法集中處理上述所有方法的功能,其完整語法定義如下:

    parseRequest(HttpServletRequest req,int sizeThreshold,long sizeMax,

                 String path)

    這兩個parseRequest方法都會拋出FileUploadException異常。

    1.5. isMultipartContent方法

    isMultipartContent方法方法用于判斷請求消息中的內容是否是“multipart/form-data”類型,是則返回true,否則返回falseisMultipartContent方法是一個靜態方法,不用創建DiskFileUpload類的實例對象即可被調用,其完整語法定義如下:

    public static final boolean isMultipartContent(HttpServletRequest req)

    1.6. setHeaderEncoding方法

    由于瀏覽器在提交FORM表單時,會將普通表單中填寫的文本內容傳遞給服務器,對于文件上傳字段,除了傳遞原始的文件內容外,還要傳遞其文件路徑名等信息,如后面的圖1.3所示。不管FORM表單采用的是“application/x-www-form-urlencoded”編碼,還是“multipart/form-data”編碼,它們僅僅是將各個FORM表單字段元素內容組織到一起的一種格式,而這些內容又是由某種字符集編碼來表示的。關于瀏覽器采用何種字符集來編碼FORM表單字段中的內容,請參看筆者編著的《深入體驗java Web開發內幕——核心基礎》一書中的第6.9.2的講解,“multipart/form-data”類型的表單為表單字段內容選擇字符集編碼的原理和方式與“application/x-www-form-urlencoded”類型的表單是相同的。FORM表單中填寫的文本內容和文件上傳字段中的文件路徑名在內存中就是它們的某種字符集編碼的字節數組形式,Apache文件上傳組件在讀取這些內容時,必須知道它們所采用的字符集編碼,才能將它們轉換成正確的字符文本返回。

    對于瀏覽器上傳給WEB服務器的各個表單字段的描述頭內容,Apache文件上傳組件都需要將它們轉換成字符串形式返回,setHeaderEncoding 方法用于設置轉換時所使用的字符集編碼,其原理與筆者編著的《深入體驗java Web開發內幕——核心基礎》一書中的第6.9.4節講解的ServletRequest.setCharacterEncoding方法相同。setHeaderEncoding 方法的完整語法定義如下:

    public void setHeaderEncoding(String encoding)

    其中,encoding參數用于指定將各個表單字段的描述頭內容轉換成字符串時所使用的字符集編碼。

    注意:如果讀者在使用Apache文件上傳組件時遇到了中文字符的亂碼問題,一般都是沒有正確調用setHeaderEncoding方法的原因。



    2. FileItem

    FileItem類用來封裝單個表單字段元素的數據,一個表單字段元素對應一個FileItem對象,通過調用FileItem對象的方法可以獲得相關表單字段元素的數據。FileItem是一個接口,在應用程序中使用的實際上是該接口一個實現類,該實現類的名稱并不重要,程序可以采用FileItem接口類型來對它進行引用和訪問,為了便于講解,這里將FileItem實現類稱之為FileItem類。FileItem類還實現了Serializable接口,以支持序列化操作。

    對于“multipart/form-data”類型的FORM表單,瀏覽器上傳的實體內容中的每個表單字段元素的數據之間用字段分隔界線進行分割,兩個分隔界線間的內容稱為一個分區,每個分區中的內容可以被看作兩部分,一部分是對表單字段元素進行描述的描述頭,另外一部是表單字段元素的主體內容,如圖1.3所示。

    1.3

    主體部分有兩種可能性,要么是用戶填寫的表單內容,要么是文件內容。FileItem類對象實際上就是對圖1.3中的一個分區的數據進行封裝的對象,它內部用了兩個成員變量來分別存儲描述頭和主體內容,其中保存主體內容的變量是一個輸出流類型的對象。當主體內容的大小小于DiskFileUpload.setSizeThreshold方法設置的臨界值大小時,這個流對象關聯到一片內存,主體內容將會被保存在內存中。當主體內容的數據超過DiskFileUpload.setSizeThreshold方法設置的臨界值大小時,這個流對象關聯到硬盤上的一個臨時文件,主體內容將被保存到該臨時文件中。臨時文件的存儲目錄由DiskFileUpload.setRepositoryPath方法設置,臨時文件名的格式為“upload_00000005(八位或八位以上的數字).tmp”這種形式,FileItem類內部提供了維護臨時文件名中的數值不重復的機制,以保證了臨時文件名的唯一性。當應用程序將主體內容保存到一個指定的文件中時,或者在FileItem對象被垃圾回收器回收時,或者Java虛擬機結束時,Apache文件上傳組件都會嘗試刪除臨時文件,以盡量保證臨時文件能被及時清除。

    下面介紹FileItem類中的幾個常用的方法:

    2.1. isFormField方法

    isFormField方法用于判斷FileItem類對象封裝的數據是否屬于一個普通表單字段,還是屬于一個文件表單字段,如果是普通表單字段則返回true,否則返回false。該方法的完整語法定義如下:

    public boolean isFormField()

    2.2. getName方法

    getName方法用于獲得文件上傳字段中的文件名,對于圖1.3中的第三個分區所示的描述頭,getName方法返回的結果為字符串“C:"bg.gif”。如果FileItem類對象對應的是普通表單字段,getName方法將返回null。即使用戶沒有通過網頁表單中的文件字段傳遞任何文件,但只要設置了文件表單字段的name屬性,瀏覽器也會將文件字段的信息傳遞給服務器,只是文件名和文件內容部分都為空,但這個表單字段仍然對應一個FileItem對象,此時,getName方法返回結果為空字符串"",讀者在調用Apache文件上傳組件時要注意考慮這個情況。getName方法的完整語法定義如下:

    public String getName()

    注意:如果用戶使用Windows系統上傳文件,瀏覽器將傳遞該文件的完整路徑,如果用戶使用Linux或者Unix系統上傳文件,瀏覽器將只傳遞該文件的名稱部分。

    2.3getFieldName方法

    getFieldName方法用于返回表單字段元素的name屬性值,也就是返回圖1.3中的各個描述頭部分中的name屬性值,例如“name=p1”中的“p1”getFieldName方法的完整語法定義如下:

    public String getFieldName()

    2.4. write方法

    write方法用于將FileItem對象中保存的主體內容保存到某個指定的文件中。如果FileItem對象中的主體內容是保存在某個臨時文件中,該方法順利完成后,臨時文件有可能會被清除。該方法也可將普通表單字段內容寫入到一個文件中,但它主要用途是將上傳的文件內容保存在本地文件系統中。其完整語法定義如下:

    public void write(File file)

    2.5getString方法

        getString方法用于將FileItem對象中保存的主體內容作為一個字符串返回,它有兩個重載的定義形式:

    public java.lang.String getString()

    public java.lang.String getString(java.lang.String encoding)

         throws java.io.UnsupportedEncodingException

    前者使用缺省的字符集編碼將主體內容轉換成字符串,后者使用參數指定的字符集編碼將主體內容轉換成字符串。如果在讀取普通表單字段元素的內容時出現了中文亂碼現象,請調用第二個getString方法,并為之傳遞正確的字符集編碼名稱。

    2.6. getContentType方法

    getContentType 方法用于獲得上傳文件的類型,對于圖1.3中的第三個分區所示的描述頭,getContentType方法返回的結果為字符串“image/gif”,即“Content-Type”字段的值部分。如果FileItem類對象對應的是普通表單字段,該方法將返回nullgetContentType 方法的完整語法定義如下:

    public String getContentType()

    2.7. isInMemory方法

    isInMemory方法用來判斷FileItem類對象封裝的主體內容是存儲在內存中,還是存儲在臨時文件中,如果存儲在內存中則返回true,否則返回false。其完整語法定義如下:

    public boolean isInMemory()

    2.8. delete方法

    delete方法用來清空FileItem類對象中存放的主體內容,如果主體內容被保存在臨時文件中,delete方法將刪除該臨時文件。盡管Apache組件使用了多種方式來盡量及時清理臨時文件,但系統出現異常時,仍有可能造成有的臨時文件被永久保存在了硬盤中。在有些情況下,可以調用這個方法來及時刪除臨時文件。其完整語法定義如下:

    public void delete()



    3. FileUploadException

    在文件上傳過程中,可能發生各種各樣的異常,例如網絡中斷、數據丟失等等。為了對不同異常進行合適的處理,Apache文件上傳組件還開發了四個異常類,其中FileUploadException是其他異常類的父類,其他幾個類只是被間接調用的底層類,對于Apache組件調用人員來說,只需FileUploadException異常類進行捕獲和處理即可



    4. ServletRequestContext

    ServletRequestContext類提供訪問request的方法。實現RequestContext接口。

    posted @ 2009-12-03 13:46 FOG 閱讀(298) | 評論 (0)編輯 收藏

    prototype.js是一個很強大的Javascript函數庫,它可以讓你很輕松的使用一些特效,實現AJAX的功能.雖然prototype.js是為了Ruby On Rails開發的,它的純Javascript的性質也使得它很容易用在其他的網絡程序中.可惜的是,Prototype.js還沒有強大的文檔解釋,盡管它的代碼非常有條理,但是也給初學者造成了一定的麻煩.作者在README里說:

    Prototype is embarrassingly lacking in documentation. (The source code should be fairly easy to comprehend; I’m committed to using a clean style with meaningful identifiers. But I know that only goes so far.)

    基本用法:以Element Class為例,prototype給每個主要的分類都分成了一個Class,使用起來很方便,要產生特定的效果的話只要用new Class.function(<argument>)就可以了.比如:
    <DIV id="div1"><a href="#" onclick="new Element.toggle(''div2'')">Click Me</a></DIV>
    <DIV id="div2">Hello!</DIV>

    當點擊Click Me的時候,div2就會交替隱藏或顯示.注意,你可以給toggle加上無限個parameter,比如Element.toggle(''div2'',''div3'',''div4'')...

    下面是每個重要的類和函數的解釋:

    prototype 1.2.0 的函數簡介
    函數名 解釋 舉例
    Element.toggle 交替隱藏或顯示 "Element.toggle(''div1'',''div2'')
    Element.hide 隱藏 "Element.hide(''div1'',''div2'')
    Element.show 顯示 "Element.show(''div1'',''div2'')
    Element.remove 刪除 "Element.remove(''div1'',''div2'')
    Element.getHeight 取得高度 "Element.getHeight(''div1'')
    Toggle.display 和Element.toggle相同 "Toggle.display(''div1'',''div2'')
    Insertion.Before 在DIV前插入文字 "Insertion.Before(''div1'',''my content'')
    Insertion.After 在DIV后插入文字 "Insertion.After(''div1'',''my content'')
    Insertion.Top 在DIV里最前插入文字 "Insertion.Top(''div1'',''this is a text'')
    Insertion.Bottom 在DIV里最后插入文字 "Insertion.Bottom(''div1'',''this is a text'')
    PeriodicalExecuter 以給定頻率調用一段JavaScript "PeridicalExecutor(test, 1)"這里test是Javascript的函數,1是頻率(1秒).
    $ 取得一個DIV, 相當于getElementById() $(''div1'')
    Field.clear 清空一個輸入框 "Field.clear(''textfield1'')
    Field.focus 把 焦點集中在輸入框上 "Field.focus(''select1'')
    Field.present 判斷內容是否為空 "alert(Field.present(''textfield1''))"
    Field.select 選擇輸入框的內容 "Field.select(''textfield1'')"
    Field.activate 把 焦點集中在輸入框上并選擇輸入框的內容 "Field.activate(''textfield1'')"
    Form.serialize 把表格內容轉化成string
    Form.getElements 取得表格內容為數組形式
    Form.disable disable表格所有內容 Form.disable(''form1'') (這個好象不work)
    Form.focusFirstElement 把焦點集中在表格第一個元素上 Form.focusFirstElement(''form1'')
    Form.reset Reset表格 Form.reset(''form1'')
    Form.Element.getValue 取得表格輸入框的值 Form.Element.getValue(''text1'')
    Form.Element.serialize    把表格中輸入框內容轉化成string Form.Element.serialize(''text1'')
    $F 等同于Form.Element.getValue() $F(''text1'')
    Effect.Highlight 高亮特效. Effect.Highlight(''text1'')
    Effect.Fade 褪色特效
    Effect.Scale 放大縮小(百分比)

    Effect.Scale(''text1'', 200)
    這里200 = 200%, 即兩倍

    Effect.Squish 消失特效.文字縮小后消失 Effect.Squish(''text1'')
    Effect.Puff 消失特效.文字放大后消失 Effect.Puff(''text1'')
    Effect.Appear 出現特效
    Effect.ContentZoom ZOOM特效.
    Ajax.Request 傳送Ajax請求給服務器 Ajax.Request(''http://server/s.php'')
    Ajax.Updater 傳送Ajax請求給服務器并用答復的結果更新指定的Container Ajax.Updater(''text1'',''http://server/s.php'')

     

    Ajax的函數實際上還有一個可選參數,就是options.在未指明的情況下,Ajax使用的是''POST''發送請求,而且是異步執行,如果想要改用''GET''和同步,就可以用Ajax.Request(''http://server/s.php'',''get'','''',''a=1&b=2'')來執行.

    在Rails中Ajax的函數被封裝成Ruby的函數,所以不必直接采用Ajax.Request,Ajax.Updater.但是知道它是怎么工作的也很有用.

    posted @ 2009-11-30 00:14 FOG 閱讀(2268) | 評論 (9)編輯 收藏
     

     

    <script src="js/jquery.form.js" type="text/javascript"></script>

    Jquery Form Plugin是jquery最重要的插件之一,它利用AJAX技術在不引起頁面刷新的情況下POST表單。主要有兩個方法:ajaxform和 ajaxsubmit。它會自動收集表單元素內容,決定如何管理提交進程。這兩個方法支持多重選擇。我想AJAX方式的表單應用再沒有比這個插件更簡單易用的了。

    先在頁面里設置一個普通的表單:
    Html代碼 復制代碼

       1. <form id=”myForm” action=”comment.php” method=”post”>  
       2.      姓名: <input type=”text” name=”name” id=”name”/>  
       3.      評論: <textarea name=”comment” id=”comment”></textarea>  
       4.      <input type=”submit” value=”提交評論” />  
       5. </form>  
       6. [/html]  

    <form id=”myForm” action=”comment.php” method=”post”>
        姓名: <input type=”text” name=”name” id=”name”/>
        評論: <textarea name=”comment” id=”comment”></textarea>
        <input type=”submit” value=”提交評論” />
    </form>
    [/html]


    加載jquery庫和插件腳本庫。然后簡單地寫一段初始化腳本,這段腳本將在DOM加載完成時執行:
    Html代碼 復制代碼

       1. <head>  
       2.      <script type=”text/javascript” src=”jquery.js”></script>   //加載jquery  
       3.      <script type=”text/javascript” src=”form.js”></script>     //加載插件  
       4.      <script type=”text/javascript”>  
       5.          // DOM加載完畢后執行  
       6.          $(document).ready(function() {  
       7.              // 綁定’myForm’并定義一個簡單的回調函數  
       8.              $('#myForm').ajaxForm(function() {  
       9.                  alert(”評論提交完成!”);  
      10.              });  
      11.          });  
      12.      </script>  
      13. </head>  
      14. [/html] 

    <head>
        <script type=”text/javascript” src=”jquery.js”></script>  //加載jquery
        <script type=”text/javascript” src=”form.js”></script>    //加載插件
        <script type=”text/javascript”>
            // DOM加載完畢后執行
            $(document).ready(function() {
                // 綁定’myForm’并定義一個簡單的回調函數
                $('#myForm').ajaxForm(function() {
                    alert(”評論提交完成!”);
                });
            });
        </script>
    </head>
    [/html]

    OK,就是這么簡單。當點擊“提交評論”按鈕后,表單的數據就會POST到comment.php腳本,并且返回“評論提交完成”信息(如果提交成功)。頁面并沒有刷新,非常AJAX……

    讓我們來看看這個插件還有什么強大的功能。

    ajaxForm

    1. 該方法須預先綁定表單,所以它一般在$(document).ready(function() { …}里定義。它能讓表單在不刷新頁面的情況下POST到目標。可以為該方法提供一個參數,參數一般是一個回調函數用于返回信息給用戶。當然如果不提供參數也行,只是表單提在無聲無息地提交后無法得到確認了。

    2. 增加所有需要的事件監聽器,為AJAX提交表單做好準備。ajaxForm不能提交表單。在document的ready函數中,使用ajaxForm來為 AJAX提交表單進行準備。ajaxForm接受0個或1個參數。這個單個的參數既可以是一個回調函數,也可以是一個Options對象。
    可鏈接(Chainable):可以。

    實例:
    Js代碼 復制代碼

       1. $('#myFormId').ajaxForm(); 

    $('#myFormId').ajaxForm();

    ajaxSubmit

    1. 該方法是以響應事件來通用AJAX方式提交表單。比如點擊某個按鈕或改變了某個下拉框的值,在觸發事件函數里可以設置該方法。如:
    Js代碼 復制代碼

       1. $(”#clickme”).click(function(){  
       2.    $(”#myForm”).ajaxSubmit();  
       3. }); 

    $(”#clickme”).click(function(){
      $(”#myForm”).ajaxSubmit();
    });

    或者這樣:
    Html代碼 復制代碼

       1. <select id=”mySelect” onchange=”$(‘#myForm’).ajaxSubmit();”> 

    <select id=”mySelect” onchange=”$(‘#myForm’).ajaxSubmit();”>

    2. 馬上由AJAX來提交表單。大多數情況下,都是調用ajaxSubmit來對用戶提交表單進行響應。ajaxSubmit接受0個或1個參數。這個單個的參數既可以是一個回調函數,也可以是一個Options對象。
    可鏈接(Chainable):可以。

    實例:
    Js代碼 復制代碼

       1. // 綁定表單提交事件處理器  
       2. $('#myFormId').submit(function() {  
       3.     // 提交表單  
       4.      $(this).ajaxSubmit();  
       5.     // 為了防止普通瀏覽器進行表單提交和產生頁面導航(防止頁面刷新?)返回false  
       6.     return false;  
       7.     }); 

    // 綁定表單提交事件處理器
    $('#myFormId').submit(function() {
        // 提交表單
        $(this).ajaxSubmit();
        // 為了防止普通瀏覽器進行表單提交和產生頁面導航(防止頁面刷新?)返回false
        return false;
       });

    formSerialize

    1. 該方法可以表單域的名稱和值連接起來,形成一個字符串,字符串格式為name1=value1&name2=value2…比如:
    Js代碼 復制代碼

       1. var queryString=$(”#myForm”).formSerialize(); 

    var queryString=$(”#myForm”).formSerialize();

    變量queryString的值將為變成name=xxx&comment=xxx。得到這個字符串后,可以用$.post來提交,

    如:
    Js代碼 復制代碼

       1. $.post(”comment.php”,queryString); 

    $.post(”comment.php”,queryString);

    2.將表單串行化(或序列化)成一個查詢字符串。這個方法將返回以下格式的字符串:name1=value1&name2=value2。
    可鏈接(Chainable):不能, 這個方法返回一個字符串。

    實例:
    Js代碼 復制代碼

       1. var queryString = $('#myFormId').formSerialize();  
       2.  
       3. // 現在可以使用$.get、$.post、$.ajax等來提交數據  
       4. $.post('myscript.php', queryString); 

    var queryString = $('#myFormId').formSerialize();

    // 現在可以使用$.get、$.post、$.ajax等來提交數據
    $.post('myscript.php', queryString);

    fieldSerialize

    1. 和formSerialize一樣,返回一個字符串,但返回的是表單指定元素或特定元素類型域的字符串。返回字符串格式也是一樣的。如:var queryString = $(’#myForm :text’).fieldSerialize();//返回myForm表單內所有文本框的字符串值。

    2.將表單的字段元素串行化(或序列化)成一個查詢字符串。當只有部分表單字段需要進行串行化(或序列化)時,這個就方便了。這個方法將返回以下格式的字符串:name1=value1&name2=value2。
    可鏈接(Chainable):不能,這個方法返回一個字符串。

    實例:
    Js代碼 復制代碼

       1. var queryString = $('#myFormId .specialFields').fieldSerialize();  

    var queryString = $('#myFormId .specialFields').fieldSerialize();

    fieldValue

    1.返回一個數組,記錄表單元素的值。如果表單沒有值則對應數組值為空。如:

    Js代碼 復制代碼

       1. var data=$(’:text’).fieldValue();//返回所有表單中所有文本框類型的值。 

    var data=$(’:text’).fieldValue();//返回所有表單中所有文本框類型的值。

    變量data為[”,”,”]這樣的一個數組,數組元素對應表單元素的值。事實上我們可以這樣來得到“姓名”文本框里的值:var data=$(”#name”).val();(這個元素要有ID屬性)這樣的作法不需要jquery form插件也可以得到值。但使用插件可以更方便地取得單個或多個表單中特定元素域的值。比如取得所有文本框或所有復選框的值。只要加個“:”就可以。這種方法也可以用到formSerialize或fieldSerialize方法上。
    Js代碼 復制代碼

       1. var data=$(”#myForm :text”).fieldValue();//取得在myForm表單里所有文本框的值。 

    var data=$(”#myForm :text”).fieldValue();//取得在myForm表單里所有文本框的值。

    2.返回匹配插入數組中的表單元素值。從0.91版起,該方法將總是以數組的形式返回數據。如果元素值被判定可能無效,則數組為空,否則它將包含一個或多于一個的元素值。
    可鏈接(Chainable):不能,該方法返回數組。

    實例:
    Js代碼 復制代碼

       1. // 取得密碼輸入值  
       2. var value = $('#myFormId :password').fieldValue();  
       3. alert('The password is: ' + value[0]);  

    // 取得密碼輸入值
    var value = $('#myFormId :password').fieldValue();
    alert('The password is: ' + value[0]);

    formToArray

    同樣也返回一個數組,這個數組是對象數組。對象有name和value兩個屬性,分別記錄表單中的元素名稱和元素值。如:
    Js代碼 復制代碼

       1. var data=$(”#myForm”).formToArray(); 

    var data=$(”#myForm”).formToArray();

    變量data得到的是一個對象數組。data[0].name保存myForm表單中第一個表單元素的名稱屬性值,這里是”name”。data[0].value保存myForm表單中第一個表單元素的值,這里就是填了什么值就是什么。
    resetForm

    1.該方法很簡單啦,恢復表單初始狀態。也就恢復到DOM加載完成時的表單狀態。類似“重設表單”

    2.清除表單元素。該方法將所有的文本(text)輸入字段、密碼(password)輸入字段和文本區域(textarea)字段置空,清除任何select元素中的選定,以及將所有的單選(radio)按鈕和多選(checkbox)按鈕重置為非選定狀態。
    可鏈接(Chainable):可以。
    Js代碼 復制代碼

       1. $('#myFormId').clearForm(); 

    $('#myFormId').clearForm();

    clearFields

    1.清除表單域元素。可以清除特定類型的域元素,比如清除所有文本框的,或所有復選框的域。

    2.清除字段元素。只有部分表單元素需要清除時才方便使用。
    可鏈接(Chainable):可以。
    Js代碼 復制代碼

       1. $('#myFormId .specialFields').clearFields();  

    $('#myFormId .specialFields').clearFields();

    Options對象

    ajaxForm和ajaxSubmit都支持眾多的選項參數,這些選項參數可以使用一個Options對象來提供。Options只是一個JavaScript對象,它包含了如下一些屬性與值的集合:

    target

    指明頁面中由服務器響應進行更新的元素。元素的值可能被指定為一個jQuery選擇器字符串,一個jQuery對象,或者一個DOM元素。
    默認值:null。

    url

    指定提交表單數據的URL。
    默認值:表單的action屬性值

    type

    指定提交表單數據的方法(method):“GET”或“POST”。
    默認值:表單的method屬性值(如果沒有找到默認為“GET”)。

    beforeSubmit

    表 單提交前被調用的回調函數。“beforeSubmit”回調函數作為一個鉤子(hook),被提供來運行預提交邏輯或者校驗表單數據。如果 “beforeSubmit”回調函數返回false,那么表單將不被提交。“beforeSubmit”回調函數帶三個調用參數:數組形式的表單數據, jQuery表單對象,以及傳入ajaxForm/ajaxSubmit中的Options對象。表單數組接受以下方式的數據:

    [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]


    默認值:null

    success

    表單成功提交后調用的回調函數。如果提供“success”回調函數,當從服務器返回響應后它被調用。然后由dataType選項值決定傳回responseText還是responseXML的值。
    默認值:null

    dataType

    期望返回的數據類型。null、“xml”、“script”或者“json”其中之一。dataType提供一種方法,它規定了怎樣處理服務器的響應。這個被直接地反映到jQuery.httpData方法中去。下面的值被支持:

    'xml':如果dataType == 'xml',將把服務器響應作為XML來對待。同時,如果“success”回調方法被指定, 將傳回responseXML值。

    'json':如果dataType == 'json', 服務器響應將被求值,并傳遞到“success”回調方法,如果它被指定的話。

    'script':如果dataType == 'script', 服務器響應將求值成純文本。


    默認值:null(服務器返回responseText值)

    semantic

    Boolean flag indicating whether data must be submitted in strict semantic order (slower). Note that the normal form serialization is done in semantic order with the exception of input elements of type="image". You should only set the semantic option to true if your server has strict semantic requirements and your form contains an input element of type="image".
    布 爾標志,表示數據是否必須嚴格按照語義順序(slower?)來進行提交。注意:一般來說,表單已經按照語義順序來進行了串行化(或序列化),除了 type="image"的input元素。如果你的服務器有嚴格的語義要求,以及表單中包含有一個type="image"的input元素,就應該將 semantic設置為true。(譯注:這一段由于無法理解,翻譯出來可能語不達意,但請達人指正。)
    默認值:false

    resetForm

    布爾標志,表示如果表單提交成功是否進行重置。
    Default value: null

    clearForm

    布爾標志,表示如果表單提交成功是否清除表單數據。
    默認值:null

    實例:
    Js代碼 復制代碼

       1. // 準備好Options對象  
       2. var options = {  
       3.      target:     '#divToUpdate',  
       4.      url:        'comment.php',  
       5.      success: function() {  
       6.        alert('Thanks for your comment!');  
       7.      } };  
       8.  
       9.    // 將options傳給ajaxForm  
      10. $('#myForm').ajaxForm(options); 

    // 準備好Options對象
    var options = {
        target:     '#divToUpdate',
        url:        'comment.php',
        success: function() {
          alert('Thanks for your comment!');
        } };

       // 將options傳給ajaxForm
    $('#myForm').ajaxForm(options);

    注意:Options對象還可以用來將值傳遞給jQuery的$.ajax方法。如果你熟悉$.ajax所支持的options,你可以利用它們來將Options對象傳遞給ajaxForm和ajaxSubmit。

    posted @ 2009-11-26 16:50 FOG 閱讀(4582) | 評論 (3)編輯 收藏


    /**
      *刪除數據庫中已經存在的表
     **/
    if exists(select * from sys.objects where name='tb_grade')
    drop table tb_grade--刪除tb_grade表
    go
    if exists(select * from sys.objects where name='tb_student')
    drop table tb_student--刪除tb_grade表
    go

    /**
      *創建數據表
     **/
    create table tb_student--創建tb_student
    (
       student_id int identity(1,1),--學生編號(主鍵,自動增長)
       student_name nvarchar(30) not null,--學生姓名(不能為空)  
       student_sex char(10) not null,--學生性別(不能為空)
       student_age int default(18),--學生年齡(默認為18)
       constraint pk_student_id primary key (student_id)
    )
    go
    create table tb_grade--創建tb_grade
    (
      grade_id int identity(1,1),--成績編號(主鍵,自動增長1)
      student_id int,--外鍵(引用學生表student_id)
      english float,--英語成績
      math float,--數學成績
      constraint pk_grade_id primary key (grade_id),--為表tb_student創建主鍵
      constraint fk_student_id foreign key(student_id) references tb_student(student_id)--創建外鍵關系
    )
     
    select * from tb_student
    select * from  tb_grade

    /**
      *創建視圖
     **/

    /**
     *創建視圖的語法
     *
     CREATE VIEW  view_name
     AS
     select_statement
    *
    *
    */

    if exists (select * from sys.objects where name='vw_student')
    drop view vw_student --刪除已經存在的vw_student視圖
    go
    create view vw_student--創建視圖vw_student
    as
    select * from tb_student inner join tb_grade on tb_student.student_id=tb_grade.student_id
    go

    /**
      *創建索引
     **/

    /**
     *創建索引的語法
     *
    CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
        ON { table | view } ( column [ ASC | DESC ] [ ,...n ] )
    [ WITH < index_option > [ ,...n] ]
    [ ON filegroup ]

    < index_option > ::=
        { PAD_INDEX |
            FILLFACTOR = fillfactor |
            IGNORE_DUP_KEY |
            DROP_EXISTING |
        STATISTICS_NORECOMPUTE |
        SORT_IN_TEMPDB 
    }
    *
    *
    */

    if exists (select * from sys.indexes where name='index_student_id')
    drop index index_student_id on tb_student --刪除tb_student中的索引student_id
    --創建索引
    create index index_student_id on tb_student(student_id)
    go

    /**
      *創建存儲過程
     **/

    /**
     *
     *創建存儲過程的語法
     *
    CREATE PROC [ EDURE ] procedure_name [ ; number ]
        [ { @parameter data_type }
            [ VARYING ] [ = default ] [ OUTPUT ]
        ] [ ,...n ]

    [ WITH
        { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]

    [ FOR REPLICATION ]

    AS sql_statement [ ...n ]
    *
    */
    --不帶參數的存儲過程
    if exists (select * from  sys.objects where name='find_student')
    drop procedure find_student
    go
    create procedure find_student
    as
    select * from tb_student
    go
    ---調用存儲過程
    exec find_student
    go
    --帶輸入參數的存儲過程
    if exists (select * from  sys.objects where name='add_student_grade')
    drop procedure add_student_grade
    go
    create procedure add_student_grade
    --定義輸入參數
    @studentName nvarchar(30),
    @studentSex char(10),
    @studentAge int=18,
    @gradeEnglish float,
    @gradeMath float
    as
        declare @studentId int
        declare @n int
        set @n=0
        begin transaction tran_add --開啟事務
        insert into tb_student(student_name,student_sex,student_age) values(@studentName,@studentSex,@studentAge)
        set @n=@@error   
     select @studentId=max(student_id) from tb_student
     set @n=@@error 
        insert into tb_grade (student_id,english,math) values(@studentId,@gradeEnglish,@gradeMath)
     set @n=@@error 
        if(@n<>0)
           begin
               rollback transaction tran_add --回滾事務
           end
        else
           begin
         commit transaction tran_add  --提交事務
           end
    go
    ---調用存儲過程
    exec add_student_grade '張三','男',20,80,88
    go
    --帶輸出參數的存儲過程
    if exists (select * from  sys.objects where name='getCount')
    drop procedure getCount
    go
    create procedure getCount
    @n int output
    as
    select @n=count(*) from tb_student
    go
    --調用帶輸出參數的存儲過程
    declare @n int
    execute getCount @n output
    select @n
      
    /**
     *創建觸發器
     **/
    /**
     *
     *創建觸發器的語法
     *
     *
    CREATE TRIGGER trigger_name
    ON { table | view }
    [ WITH ENCRYPTION ]
    {
        { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }
            [ WITH APPEND ]
            [ NOT FOR REPLICATION ]
            AS
            [ { IF UPDATE ( column )
                [ { AND | OR } UPDATE ( column ) ]
                    [ ...n ]
            | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
                    { comparison_operator } column_bitmask [ ...n ]
            } ]
            sql_statement [ ...n ]
        }
    }
    *
    *
    **/

    IF EXISTS (SELECT name FROM sysobjects
    WHERE name = 'reminder' AND type = 'TR')
    DROP TRIGGER reminder --刪除觸發器reminder
    GO
    --創建觸發器reminder(如果對表tb_student進行添加和更新信息時出發)
    CREATE TRIGGER reminder
    ON tb_student
    FOR INSERT, UPDATE
    AS
    RAISERROR (50009, 16, 10)
    GO
    ---創建DELETE觸發器
    IF EXISTS (SELECT name FROM sysobjects
    WHERE name = 'sendemail' AND type = 'TR')
    DROP TRIGGER sendemail--刪除觸發器sendemail
    GO
    --創建觸發器
    CREATE TRIGGER sendemail
    ON tb_grade
    FOR DELETE
    AS
    EXEC master..xp_sendmail' MaBin',
    'Don''t forget to print a report for the distributors.'
    GO

    posted @ 2009-11-24 17:54 FOG 閱讀(1104) | 評論 (1)編輯 收藏
    僅列出標題  
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿

    隨筆檔案

    MY LINK

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产成人免费网站| 最近免费中文字幕中文高清 | 亚洲午夜久久久久久久久电影网| 亚洲高清一区二区三区| 97视频热人人精品免费| 亚洲不卡中文字幕| 午夜视频免费成人| 亚洲AV永久无码精品网站在线观看| 性xxxx视频播放免费| 看亚洲a级一级毛片| 亚洲国产精品一区二区第一页免 | xxxxx做受大片视频免费| 亚洲成A人片在线观看无码3D| 免费观看亚洲人成网站| 久久精品国产亚洲5555| 少妇性饥渴无码A区免费| 亚洲网站在线观看| 一二三四影视在线看片免费| 亚洲国产精华液2020| 亚洲电影日韩精品| 久久er国产精品免费观看2| 亚洲熟妇无码久久精品| 免费黄色app网站| selaoban在线视频免费精品| 亚洲精品无码av人在线观看| 午夜不卡久久精品无码免费| 久久久久亚洲AV无码麻豆| 欧美a级成人网站免费| 免费手机在线看片| 亚洲国产综合专区在线电影| 成年女人18级毛片毛片免费| 精品国产日韩亚洲一区在线| 国产亚洲精品精品国产亚洲综合| 久99久精品免费视频热77| 亚洲综合一区国产精品| 亚洲精品99久久久久中文字幕 | 在线观看亚洲免费视频| 最近2019中文免费字幕在线观看| 亚洲国产精品综合久久网各| 免费一看一级毛片全播放| 99视频在线精品免费|