高分请教一个问题,关于Struts 的ActionForm中的reset的用法
请问reset到底是在什么时候开始调用呢?
最好能分两个方面说,一种是在request域中,一种是在session域中,最近一直在为这个困惑,主要是不知道actionForm这个到底在什么时候被建立,最近就遇见了一个问题:
1,在一个action1中建立了actionForm并填充了其中的属性,并设置域为session,然后把它传到一个含有表单的jsp页面,表单的<html:form action="/action2.do" method="POST">,表单中有两个<html:text>,其中的property分别为property1和property2,但是这个表单并不包含actionForm中的property3属性。
2,property1和property2连各属性均能够显示正常,这表示actionForm已经被正常的建立(包括property3属性也被正常添加)并且存储在session中了。
3,提交表单,actionForm被传递到action2中(action2关于actionForm域的属性也被设为session),这时候出现问题了,如果reset()函数中不包含任何初始化的信息则actionForm被正确的传递,可以获得actionForm中property3的信息,但是如果reset()中包含了初始化的信息,则property3属性由于在第二步中没有被设置,即因为<html:form>中没有他的相关<html:text>,所以便无法获得关于property3的相关信息,这就是我困惑的地方,好像actionForm在提交表单的时候自己reset()了一次,不过我在书上看到的不是说如果actionForm存在于session中,就需要由程序员自己控制reset函数了的吗?而他这里在提交表单的时候,应该能从session中找到同名的actionForm,然后利用它,并不应该去调用actionForm的reset函数,不知道我的理解有错吗?
这就是我的迷惑之处,希望各位有经验的strutser能帮我解释一下,谢谢!
问题点数:100、回复次数:9Top
1 楼luckybeggar(木子)回复于 2004-05-04 10:15:08 得分 0
我没有在session 中用过,但我有过类似的经历,忘了,但我当时的理解也和你一样,就是在进入.jsp之前就先调了formbean的reset()了我是这样理解的和你的疑惑一样Top
2 楼VVV_lucky(*太阳*)回复于 2004-05-04 10:37:52 得分 30
1,原因:
你提交了form,这样form中的所有属性都被更新了,因为你提交的时候property3为null,所以得到的就是property3的默认值。
2,解决办法:
你可以把property3也放到jsp页面,设置成hidden就行了。Top
3 楼qinghui521(渐行渐远)回复于 2004-05-04 12:32:06 得分 10
同意楼上的。Top
4 楼x980702paul()回复于 2004-05-04 12:37:29 得分 30
reset()方法应该是在formBean的对象被"干掉"时被回调Top
5 楼BillyW(阿弥陀佛)回复于 2004-05-04 13:52:40 得分 30
我觉得,ActionServlet先检查是否已经存在某actionform如果存在的话不会再创建它,并且调用该actionform的reset方法!Top
6 楼panpan221(我是来学习的!)回复于 2004-05-04 15:12:13 得分 0
新手学习,关注Top
7 楼kenees(飞跃巅峰)回复于 2004-05-04 21:49:19 得分 0
开了半天还是没有一个比较标准的说法啊
VVV_lucky(*太阳*)兄的做法倒是可行,但是这样岂不是很麻烦啊。
还有就是,如果将一个actionForm放到session里面,他的reset方法到底是由谁负责调用呢?是由programer?还是servlet呢?Top
8 楼kenees(飞跃巅峰)回复于 2004-05-05 23:54:22 得分 0
自己UP一下~~一百分呢~Top
9 楼kenees(飞跃巅峰)回复于 2004-05-06 20:28:46 得分 0
唉~~Top




