这周又是接到一个朦胧的任务安排,手上没有接到任何具体的任务,只好自己找事做。自己测试了一下项目,发现问题还不少,特别是切换到不同的局。如:分页采用的是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的值的数组.