| |
| jsp处理表单的一些经验分享 |
| |
发布者: 发布时间:2007-02-10 |
|
|
|
之前一直写struts,在页面跳转和表单提交这一类问题上碰了不少钉子,于是想把处理这类问题的经历和见解写出来,供各位业内的同仁参考,有不对的地方,敬请斧正!
1:超连接跳转 我们在超连接的时候,常常连接到一个jsp或者Action,比如:
<a href="test.jsp?param1=value¶m2=value2" >XXX</a>
这样做会有一个问题:在test.jsp中,除你传递的param1和param2参数外,你用request.getParamter()取任何原来页面的表单元素都会为空,这是因为<a href>这种方式会产生新的request生命周期,在这个request中只会包含超连接后跟随的?param1这种参数, 因此我的建议是如果不是很简单的页面跳转(比如回登陆页面之类的),尽量不要用这种超连接方式。 |
|
2:即传参又提交表单 如果确实既要像上述第一种方式传参数,又要提交表单的话,可以采取如下方式:
<a href='#' onClick=commonSubmit('param1=value1¶m2=value2') >XXX</a>在脚本中如下处理:
function commonSubmit(url) { form1.action="/jsp/managerAction.do?"+url; form1.submit(); }
提交到Action和jsp是一样的原理,但要记住<form>中method=post不能少,否则它只提交表单而不传param参数了(正好和第一种相反:) ) 3:js和java变量互传 在jsp中经常会遇到把js变量赋给java变量,或者将java变量赋给js变量的情况,在此将通用的处理方法小结如下: java变量传给js好办,var a ="<%=javaParam%>";注意要将引号""加上;js变量给java稍微复杂点,一般是在表单中用一个 <input type='hidden' name='jsParam' value=''>的隐藏表单元素,然后在脚本中将js变量值赋给它:
var jsParamValue='aaaa'; form1.jsParam.value=jsParamValue;
然后就可以request.getPrameter("jsPrama");来取得js变量值了 4:Action中request不会丢掉 不知大家有没有注意到这个好处,Struts架构中是由一个ActionServlet来作为MVC的控制器角色,jsp页面提交后request是传到ActionServelt中的, 而ActionServlet将根据struts-config.xml中的配置调用相应的Action的方法,并将从jsp中获得的request传给Action类,这样request的生命周期是连续的,即你在jsp中提交了表单,在Action中执行了方法,再回到jsp页面,用request.getParamter()取jsp页面的表单元素值会发现它还在,这对于页面下拉列表等选择项防止复位是一个很好实现方法。
5:传参时参数有空格的情况 如果你提交form时带参数,比如form1.action="/jsp/Action.do?param1="+value1,注意如果value1中带有空格的话,你在
Action中request.getParameter("param1");
取得的只是空格前的值,因此如果有这种带空格的参数在传递时,个人建议是将其转化为特定的字符串,value1=value1.replaceAll(" ","%NULL%"); 然后在Action中将其转回来:request.getParamter("param1").replaceAll("%NULL%"," "); 6:form-data属性 如果你要用<input type=file>来上传文件的话,注意在一个表单中如果有enctype="multipart/form-data"属性的话,是不能接收除type=file外的其他表单元素类型的。 即如果你把<input type=file>和<input type=text">放在同一表单中,而该表单有enctype="multipart/form-data"的话,request.getParamter取text的值会为空, 这个问题的最简单的解决方法是将<input type=file>单独放一个表单,上传文件时只提交该表单即可。 7:jsp中开模式对话框的方式 与Swing中类似,jsp中也有模式对话框这一概念,你可以将一个jsp页面放到一个模式对话框中打开,这样在模式对话框消失前,原jsp页面将不可操作。特别适合父页面中要做一些额外的选择操作,而又没必要跳转到新的jsp页面的时候, 开模式对话框的方式参考如下: <input type=button value=”…”,onClick=”open();”/> Function open() { If(window.showModelDialog()) { Var returnValue = showModelDialog(“/jsp/模式窗口包含的jsp页面路径”; help=0;status=0;center=yes;dialogWidth=100pt;dialogHeight=100pt”); } }
|
| (转载文章请保留出处:北天JAVA技术网(www.java114.com)) |
| |
| 更多精彩文章: |
| Java反射经典实例 |
| 使用Java中的Date和Calendar类 |
| try catch finally与return的执行顺序 |
| prototype(原型)模式 |
| 格式化输出数字 |
| Eclipse3.2安装简介 |
| |
| 最近评论: |
|
|
| 你曾悄悄的来过! |
| wow gold,wow gold,wow gold,ffxi gil max(7189) |
|
|
| 冰封的往事! |
| wow power leveling,wow gold,wow power leveling,wow gold
max(9234) |
|
|
| 冰封的往事! |
| wow power leveling,wow gold,WoW Gold,wow gold
max(8110) |
|
|
| 飞舞的传奇! |
| 传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(3598) |
|
|
| 回复:jsp处理表单的一些经验分享 |
| 我如果是在action中return回jsp页面的时候(struts-config中跳转到jsp),如何才能把新开的这个jsp页面放到模式对话框中去。 |
|
|
| |
| 免责声明:该文章由网友发表,如果对您造成侵权,请联系站长。 |
|