赛迪网 > IT技术 Java > 技术动态
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

JAVA基础:jsp处理表单的一些经验分享

发布时间:2007.10.31 05:05     来源:赛迪网技术社区    作者:baocl

之前一直写struts,在页面跳转和表单提交这一类问题上碰了不少钉子,于是想把处理这类问题的经历和见解写出来,供各位业内的同仁参考,有不对的地方,敬请斧正!

1:超连接跳转
     我们在超连接的时候,常常连接到一个jsp或者Action,比如:

XXX

     这样做会有一个问题:在test.jsp中,除你传递的param1和param2参数外,你用request.getParamter()取任何原来页面的表单元素都会为空,这是因为这种方式会产生新的request生命周期,在这个request中只会包含超连接后跟随的?param1这种参数, 因此我的建议是如果不是很简单的页面跳转(比如回登陆页面之类的),尽量不要用这种超连接方式。

2:即传参又提交表单
     如果确实既要像上述第一种方式传参数,又要提交表单的话,可以采取如下方式:

XXX在脚本中如下处理:

function commonSubmit(url)
{
    form1.action="/jsp/managerAction.do?"+url;
    form1.submit();
}

提交到Action和jsp是一样的原理,但要记住

中method=post不能少,否则它只提交表单而不传param参数了(正好和第一种相反:) )
 
3: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变量值了
 
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属性
     如果你要用来上传文件的话,注意在一个表单中如果有enctype="multipart/form-data"属性的话,是不能接收除type=file外的其他表单元素类型的。 即如果你把放在同一表单中,而该表单有enctype="multipart/form-data"的话,request.getParamter取text的值会为空, 这个问题的最简单的解决方法是将单独放一个表单,上传文件时只提交该表单即可。
 
7:jsp中开模式对话框的方式
      与Swing中类似,jsp中也有模式对话框这一概念,你可以将一个jsp页面放到一个模式对话框中打开,这样在模式对话框消失前,原jsp页面将不可操作。特别适合父页面中要做一些额外的选择操作,而又没必要跳转到新的jsp页面的时候,
开模式对话框的方式参考如下:

Function open() {
  If(window.showModelDialog())
  {
      Var returnValue = showModelDialog(“/jsp/模式窗口包含的jsp页面路径”;
               help=0;status=0;center=yes;dialogWidth=100pt;dialogHeight=100pt”);
   }
 
}


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· solaris上开发J2EE应用中文问题的解决 (10-30) · J2EE基础:j2ee所包含的13种核心技术 (10-30)
· JAVA基础:关于bean-to-bean mapping (10-30) · spring 2.0自定义xml 标记 (二 如何实现) (10-30)
· spring 2.0自定义xml 标记 (一 相关类) (10-30) · 使用JMX监控应用程序内、外部的状况 (10-30)
· 关于Java分布式事务处理的问题 (10-30) · Java中ThreadLocal的设计与使用 (10-30)
· 多线程设计入门 (10-30) · 解析Java中的多线程机制 (10-30)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 推动产业升级 沪年内首推电子商务地方法规
· 中国域名成为全球顶级域名 促进社会信息化
· 签合同前的四问 谈八大厂商“云计算”理念
· 亚略特烟草解决方案 移民安置信息管理系统
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统