struts中数据在action与jsp中的传递总结。
Struts中servlet之间数据的传递方式归纳如下:
1 我们可以通过 formbean来实现数据由 html到action之间数据的传递。 Servletaction接收到html请求后,在action-mapping中找到合适的form-bean对html:form表单中的属性进行匹配,然后填充。如果没有匹配上,form将为空。然后将form,actionmapping,httpservletrequest,httpservletresponse.传递给具体的action,将控制权交给action.
这时候action就可以对form 中的数据进行处理了,比如对数据库进行添加修改等工作。
在业务逻辑结束后,action将控制权转还给actionservlet,并且forward到另一个action,或者jsp页面中去。
在jsp页面中。通过jsp标签,我们可以将form中的数据填充到jsp页面中。然后servlet将jsp文件转换成html文件发送给客户。
2 可以通过Request.setAttribute,session.setAttribute。其形式是setAttribute(“pageName”,orginName,scopeType);其中设置的bean,可以是一个任意的对象,或者对象组。这样我们就可以传输多条记录了。也可以使简单的类型。
然后再jsp页面中,通过jsp标签,将数据显示。<bean:write
name=”beanname” proprety=”attributename”> (如果只有一个元素,则不写proprety属性)
3 我们还可以在jsp页面中的javascripe中通过新建javascirpe变量来传递参数。这项参数将通过url进行传输。Action通过 request. getParameter()将数据提出出来。
4 formbean的生存周期有session request page application.我们一般最长使用的是request,和session.
每次frombean,都会根据html表单提交的属性来进行匹配。而往往所根据的html表单是由jsp变换过去的。所以我们需要具体研究一下jsp页面中哪些
标签能够决定一个html表单的生成。首先jsp必须有一个<html:form>标签,它对应于html文件中的<form>标签。
<html:hidden>,<html:select>,<html:text>,等html标签都可以用来生成表单中的属性,
但是其中的property=”propertyname”,必须与form-bean中的propertyname相对应。同时这些标签的初始值可以用 bean ,或者formbean来表示。这是不受限制的。默认情况下,标签的初始值的匹配对象是struts-config-xml中<form-beans>中的name=”formname”。
你可以通过设定 name=”beanName”,来让他匹配对应的bean。
另外需要注意的是,如果你要是用bean来传递数据,那你就必须在action中setAttribute()。
5 这里是我在项目中遇到的一个混乱的错误。就是因为对struts中数据的传输不了解所造成的。在jsp页面中,我想通过bean,formbean两种方式传输数据。然而实际情况是我的formbean是空的,但是他却奇迹般的能够显示出数据。默认情况下,<html:text property=”Name”/> ,后来找到了问题的根源。因为我在action里setAttribute的时候,使用的参数
setAttribute(“formbeanName”,formbean,requestScope);其中
formbeanName恰好等于配置文件中的formbean的名字。所以这时候,jsp页面<html:text>在这个本来该是frombean的假bean中找的了合适的匹配对象,从而歪打正着的成功显示。