Struts:把页面数据提交到Form的原理及使用方法
来源:互联网 发布:汉字笔顺软件 编辑:程序博客网 时间:2024/06/05 08:17
我们使用Struts框架的其中一个好处就是,它会帮你把页面上的数据一个个的转移到ActionForm上。使你可以使用对象来获得这些数据,而不用多次使用request.getParameter(String)的方法来获得用户在页面上输入的值。
本文主要是简单说明一下这个功能的原理及几种使用方法。
首先,浏览器的请求发送到服务器端之后,web服务器(如tomcat)会把这个请求转送给ActionServlet的实例处理。而ActionServlet的doGet()和doPost()方法都会调用自身的process()方法。而process()方法会调用RequestProcessor#process(HttpServletRequest, HttpServletResponse)来完成实际的预处理请求操作。其中有两行代码是完成ActionForm实例的获得和赋值操作的。如下。
其中第一行代码是获取ActionForm的实例,第二行代码是从request中取到页面上各个项的值,赋到ActionForm的实例上,假如form为null的话,赋值操作就不会做,用户在页面上输入的信息也不会转移到form上。那么你在Action中就只能通过request.getParameter(String)的方式来获得用户输入的信息。
所以,这里最重要的就是第一行代码,只有processActionForm()返回的值不为null,populate操作(就是赋值操作)才会成功执行。
那么这个processActionForm()做了什么事情呢?它首先获取到你在struts-config.xml中为当前action配置的form名,然后使用这个名字在相应的scope(request或者session)中寻找ActionForm的实例,如果没有的话,就创建一个新的实例。
由此可以看出,只有为action配置了合适的ActionForm,用户提交的数据才会被正确的设置到form中。
不了解这个原理的话,可能会犯这样一个错误。假如有这样一个实例,页面A上有一个button是跳转到页面B的,并且这个button确实是进行了表单的submit操作,但是页面上的数据依然没有提交到form上。这是什么原因呢?因为很有可能,这个button提交的action就是B页面的显示Action,而B页面的显示Action配置的是B页面的form,所以导致数据populate失败。
对付这类问题的话,有几种方法。
1. 首先是确认页面B的显示Action是否需要配置B页面的Form,如果不需要的话,就把它配置成页面A的form,这样就可以解决了。
#大多数情况下,1都是不可行的,因为页面B的显示Action很可能需要为页面B的form设置一些属性的值。
2. 如果页面A的Action是继承了DispatchAction的话,可以在这个Action中添加一个分支,没有任何实际代码,只是跳转到页面B。然后把页面A的button的提交操作的action改成这个新的分支。
3. 还有一种有效的方法是使用ForwardAction。ForwardAction其实是struts框架为用户提供的一个共同的跳转Action,你可以通过仅在struts-config.xml中配置,而不需要写任何java代码就可以使用它。
上面的代码就是ForwardAction的一个示例。与一般的action不同的就是type必须指定为相应的ForwardAction,parameter表示接下来要跳转的url,比如说页面B的action的url,当前是相对路径了。
使用这个ForwardAction的话,需要注意两点。
1. scope 如果有这种需求,需要把页面上的数据提交到form上,并且不需要立即处理,form的scope一般设置为session。
2. 我们在设计自己的系统的时候,一般都会设计一个继承了Action的类(比如说ActionBase),然后让所有的Action都继承这个ActionBase。那么,就不要直接使用struts自带的ForwardAction了,自己照抄一个也是很简单的。
- Struts:把页面数据提交到Form的原理及使用方法
- Struts:把页面数据提交到Form的原理及使用方法
- jsp页面中form表单提交到数据库的方法
- truts2中表单可以不用struts自带的<s:form>标签,直接用html的<form>标签能够提交数据到action
- struts 的Servlet 向Form中填充数据的原理
- 使用form表单提交数据打开两个页面的问题
- Action如何接收jsp页面form表单提交的数据?
- Action如何接收jsp页面form表单提交的数据?
- 基于JQuery的Form插件---提交表单数据到服务端
- struts form表单提交action处理之后没有跳转页面
- 一个form两个提交按钮,分别提交到两页面
- 一个form两个提交按钮,分别提交到不同页面
- struts 技术 form表单提交的内容到ActionForm中为空
- 我的Struts框架学习 -- form表单提交 action数据传递
- 页面数据的提交
- struts的form接收页面中文乱码
- Struts 数据显示到jsp页面的细节问题
- form表单提交后页面的跳转
- main函数和启动例程
- 宝宝的个人博客开通了
- 编译vc2005sp1 + gdal1.41
- Asp.net网站开发架构设计要求
- SAP Library版本升级遇到的
- Struts:把页面数据提交到Form的原理及使用方法
- 嵌入式测试
- 软件.c互联网技术领域有了中国原创的产品体系
- gcc, as, ld的一些笔记
- 写博客,和大家分享技术成果
- ThreadLocal类
- 分布式程序设计
- 二手SCSi硬盘体会
- 使用grub中的内核demo