1:超連接跳轉
我們在超連接的時候,常常連接到一個jsp或者Action,比如:
XXX
這樣做會有一個問題:在test.jsp中,除你傳遞的param1和param2參數外,你用request.getParamter()取任何原來頁面的表單元素都會為空,這是因為這種方式會產生新的request生命周期,在這個request中只會包含超連接後跟隨的?param1這種參數, 因此我的建議是如果不是很簡單的頁面跳轉(比如回登陸頁面之類的),盡量不要用這種超連接方式。
2:既傳參又提交表單
如果確實既要像上述第一種方式傳參數,又要提交表單的話,可以采取如下方式:
在腳本中如下處理:
functioncommonSubmit(url)
{
form1.action="/jsp/managerAction.do?"+url;
form1.submit();
}
提交到Action和jsp是一樣的原理,但要記住中method=post不能少,否則它只提交表單而不傳param參數了(正好和第一種相反:) )
3:Action中request不會丟掉
不知大家有沒有注意到這個好處,Struts架構中是由一個ActionServlet來作為MVC的控制器角色,jsp頁面提交後request是傳到ActionServelt中的, 而ActionServlet將根據struts-config.xml中的配置調用相應的Action的方法,並將從jsp中獲得的request傳給Action類,這樣request的生命周期是連續的,即你在jsp中提交了表單,在Action中執行了方法,再回到jsp頁面,用 request.getParamter()取jsp頁面的表單元素值會發現它還在,這對於頁面下拉列表等選擇項防止復位是一個很好實現方法。
4:傳參時參數有空格的情況
如果你提交form時帶參數,比如form1.action="/jsp/Action.do?param1="+value1,注意如果value1中帶有空格的話,你在
Action中request.getParameter("param1");
取得的只是空格前的值,因此如果有這種帶空格的參數在傳遞時,個人建議是將其轉化為特定的字符串,value1=value1.replaceAll(" ","%NULL%");
然後在Action中將其轉回來:request.getParamter("param1").replaceAll("%NULL%","");
5:form-data屬性
如果你要用來上傳文件的話,注意在一個表單中如果有enctype="multipart/form-data"屬性的話,是不能接收除type=file外的其他表單元素類型的。
即如果你把textfield放在同一表單中,而該表單有enctype="multipart/form-data"的話,request.getParamter取text的值會為空, 這個問題的最簡單的解決方法是將單獨放一個表單,上傳文件時只提交該表單即可。
6:jsp中開模式對話框的方式
將一個jsp頁面放到一個模式對話框中打開,這樣在模式對話框消失前,原jsp頁面將不可操作。特別適合父頁面中要做一些額外的選擇操作,而又沒必要跳轉到新的jsp頁面的時候,開模式對話框的方式參考如下:
Functionopen() {
If(window.showModelDialog())
{
Var returnValue = showModelDialog(“/jsp/模式窗口包含的jsp頁面路徑”;
help=0;status=0;center=yes;dialogWidth=100pt;dialogHeight=100pt”);
}
}
7:js和java變量互傳
在jsp中經常會遇到把js變量賦給java變量,或者將java變量賦給js變量的情況,在此將通用的處理方法小結如下:
java變量傳給js好辦,var a="<%=javaParam%>";注意要將引號""加上;
js變量給java稍微復雜點,一般是在表單中用一個
的隱藏表單元素,然後在腳本中將js變量值賦給它:
var jsParamValue='aaaa';
form1.jsParam.value=jsParamValue;
然後就可以request.getPrameter("jsPrama");來取得js變量值了
補充:ajax其實就是實時的,在頁面不刷新的情況下,將JS變量傳到服務器的技術
總結:
不能拿JS變量在頁面上給java變量賦值;
相反可以用var jsParam = "<%=javaParam%>" 將java變量賦值給js變量
摘自 angus_17