深入研究struts中的formbean

xiaoxiao2021-03-01  10

struts中的formbean主要是用来封装(通过反射)浏览器或使用http协议的客户端提交的表单数据,我想大家在这一点上已达成共识,没什么好说的,在这层意义上,<html:text>之类表单struts tag,似乎没有什么用武之地,实际上也确实如此,使用普通的html tag可达到同样效果.但有一点很重要的是:struts tag可以自动从后台获取数据来填充页面.

下面举个例子来探讨这种机制:

现有两个action类,AAction,BAction

两个Form类,AForm,BForm

一个页面:A.jsp

这五个元素关系如下:

AAction 使用AForm,BAction使用BForm,AAction对应A.jsp,AForm和BForm都含有x和y属性,A.jsp的部分关键代码如下:

<html:form action="/BAction">

<html:text property="x" />

<html:text property="y"/>

</html:form>

当点击AAction(假设在其中使用request.setAttribute("VO",AForm),并且AForm.x=10,AForm.y=20时),出现A.jsp,但输入框x,和y空白,但如果AForm就是BForm的话,两个输入框会出现10和20,其实此时并不需要写request.setAttribute("VO",AForm),Struts有个很重要的特点是:当启动一个action时,struts实例化相应的form(如果有的话),并在forward的时候,会自动写上request.setAttrbute(formname,form),formname即你在配置文件中定义的form名,在本例中点击AAction,当AAction forward的时候,会自动写上request("AForm",AForm),所以当你想偷懒直接将form 传到页面上填充数据时,就不需要显式的这样写了.

当然如果AForm并不是BForm,你也可以这样写达到这种效果

<html:text name="VO" property="x"/>

<html:text name="VO" property="y"/>

由以上可以推断:

<html:form action="/BAction">

<html:text property="x" />

<html:text property="y"/>

</html:form>

实际上就是

<html:form action="/BAction">

<html:text name="BForm" property="x" />

<html:text name="BForm" property="y"/>

</html:form>

值得注意的是BForm可以为空,如果你将name="BForm" 改为name="VO"当然也可以是别的名,VO不能为空

由此当AForm并不是BForm的时候,我们有一种更简便的方案,即写上request.setAttribute("BForm" ,AForm),

这样就不用改页面了,但必须注意AForm必须有相应的属性

后记:

j2ee的常规做法并不推荐返回form作为jsp的数据,而应该返回一个value object或data transfer object

转载请注明原文地址: https://www.6miu.com/read-3100018.html

最新回复(0)