工作中遇到的問題:關於form表單提交的問題--無action

今天在寫一個JSP表單提交的時候,遇到了一個關於action爲空時提交的問題,由於實際工作中的情況較複雜,但下面僅將問題的關鍵記錄下來,以方便回憶。

首先表單如下:

<form name='frm1' method='post'>
<input type='text' name='age' value='23' />
<input type='button' value='提交' onclick='frm1Submit()' />
</form>


可以看到,上面的frm1的action沒寫,因爲這個頁面上面還有一些內嵌的JAVA處理代碼(這種方式很不好,不過由於這個系統較老,公司都是用這種方式,所以沒有做改變),所以我本意就是要提交到本頁面來進行處理,原本認爲不寫action就會提交到本頁面來處理(這也是正確的,不過這個本頁面和我想像中的本頁面不同,這也是造成問題的根本原因,後面會說明)。

frm1的提交事件如下:

function frm1Submit(){
   document.frm1.submit();
}


對於一個查詢很顯然是要有分頁的,所以下面還有一個分頁面的內容(在實際中,這個分頁是由代碼生成器自動生成的,下面只簡化)

每頁顯示的行數<select onchange='changePageRecords()' >
<option value='5'>5</option>
<option value='10'>10</option>
</select>


而點擊後會將頁面的一些分頁信息(比如當前頁,每頁的行數。。。加到本頁面的URL後面然後重新賦值給location)。這時問題就出來了,每次我重新點擊frm1的提交按鈕時,在請求的request中總會把這些分頁信息帶過來(由於實際工作中這些分頁信息中有一個不可以攜帶的參數,不然後影響本頁面JAVA代碼的處理),所以查詢的結果總是出問題。

後來查了很久才發現問題的原因是如果form的action沒有寫,那麼確實會提交到本頁面,但是這個本頁面是指當前的URL,而不是純淨的JSP頁面。這兩者有什麼區別呢,比如說原本的JSP頁面地址應該爲http://localhost/myservice.jsp,但是由於之前的分頁轉發會導致分頁後的當前URL變爲http://localhost/myservice.jsp?pageInfo=xxx&currntPage=xxx,所以此時當再次提交表單是,就會把之前的一些分頁信息攜帶到request中。

解決方案是明確的把form表單的action指定爲你想要提交的地址,也就是純淨的本頁面的URL(http://localhost/myservice.jsp)。所以應該將上的提交事件改爲:

function frm1Submit(){
   document.frm1.action='myservice.jsp';
   document.frm1.submit();
}


這樣問題就解決了,得到的教訓是,千萬不要省略form表單的action值,即使是要提交到本頁面,也要寫上action='myself',這樣會避免出現上面的那種情況,當然也是由於我之前沒有遇到過,現在分享給大家。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章