jsp处理表单及JS和JAVA变量互传
1:超连接跳转
我们在超连接的时候,常常连接到一个或者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
上一篇: 阿里云服务器迁移实操总结
下一篇: 撩课-Java每天10道面试题第4天