這周又是接到一個朦朧的任務安排,手上沒有接到任何具體的任務,只好自己找事做。自己測試了一下項目,發現問題還不少,特別是切換到不同的局。如:分頁採用的是window.location.href來轉向,即通過串把所有參數都傳到url上,但是這樣做之後切換到不同的局,它也會把sql語句的where串傳到後台,而最初的分類id等條件卻沒有傳過去。翻頁之後切換全宗就會發現返回的資料沒有變。
解決思路:就是把分頁條件參數如當前頁,頁數,查詢條件,總記錄數,還有一些特殊限制條件如年度,搜尋索引鍵等都作為form表單的一個欄位來提交,而一些共有的參數如分類id等作為url後的參數直接傳遞到後台,通過form.submit()方式來提交。
如:
//年度
function selectYear(selObj){
var year=selObj.options[selObj.selectedIndex].value;
var url= contextPath+'/document/getSpecialMain.do?befrom=topmenu&catName='+escape(encodeURIComponent("分類名稱"))+'&catalogid=<%=catalogid%>&knowledge_code=<%=k_code%>&docyear='+year;
window.location.href=url;
}
修改為:
//年度
function selectYear(selObj){
var year=selObj.options[selObj.selectedIndex].value;
document.getElementById("docYear1").value=year;
var url= contextPath+'/document/getSpecialMain.do?befrom=topmenu&catName='+escape(encodeURIComponent("分類名稱"))+'&catalogid=<%=catalogid%>&knowledge_code=<%=k_code%>';
this.form1.action=url;
this.form1.submit();
}
可測試的時候發現後台卻取不到catalogid等參數的值,後台才知原來form沒有設定method方法,預設採用"get"方式。
轉:http://lukejin.yo2.cn/articles/about-form-get-post.html
關於Form的get和post提交的方法,大家應該都知道是什麼概念,
get的本意是為了從伺服器端擷取資料,post是為了向伺服器端發送資料.
而我比較疑惑的是,form的action地址後面帶的參數是不是在get的時候是無效的呢?
也就說: <form action="/helloform/hello?age=22" method="get"><input type="submit"></form>
當提交表單之後,伺服器端是無法擷取age=22這個值的.
帶著這樣的疑問,我通過Maven構建了一個非常簡單的例子,這個例子只涉及一個Servlet類和一個jsp檔案.
下載helloform
你可以將此例子下載後自己調試運行,但你必須有Maven的環境和知道Maven的基礎知識,本例子使用了maven的jetty外掛程式,大大方便了部署.
結論:
經過實踐最後得出了結論
1.form預設的提交方式是get,所以很多時候需要我們自己指定method為post
2.使用get的時候,action=後面自己寫的參數是無法帶到伺服器端的,且get方式提交form的時候,是將form中的索引值以參數的方式拼到url後面的.
3.post方式提交的表單是可以擷取action後面自己寫的參數的.
4.如果表單中存在同名的項,我們可以通過request.getParameterValues("XXX")的方式獲得一個名稱為XXX的值的數組.