日期:2014-05-20  浏览次数:20640 次

Struts2中<result name="input>的配置
myAction1的SUCCESS是myPage.jsp,并且myAction1提供myPage.jsp所需的数据
myPage.jsp的form提交到myAction2

问题是当myAction2检查到myPage.jsp表单填写不合法时,怎样设置myAction2的input返回到原来填写表单的页面?

直接用<result name="input">/myPage.jsp</result>不行,因为myPage.jsp需要myAction1提供的数据
用<result name="input" type="redirectAction">myAction1</result>会到myPage.jsp但是myAction2中添加的error都没有了
用<result name="input" type="chain">myAction1</result>也不行,会跳的myAction1的input中

请问到底应该怎样设置?谢谢!!

------解决方案--------------------
myAction1的input中?myAction1有input吗?myAction1不是你在程序中自己设置的数据吗?
------解决方案--------------------
我觉得还是用校验框架吧,这样当你出现校验数据错误的时候,还能回到myPage页面
好像校验框架有个设置,就是保留原始数据的
------解决方案--------------------
这个是需要写验证的
------解决方案--------------------
我的做法:在myPage.jsp中
<s:action name="myAction1" id="myAction1" flush="true" namespace="/" />
这样myPage.jsp就有了myAction1传过来的数据了,你试试
------解决方案--------------------
你的myAction1 与myAction2 是否在同一个action类里,如果这样的话在你的
return INPUT; 前面调用一下你的那个得到数据的方法this.方法();
如果不在同一个类中可以重定向到得到数据的一个action中,这个action跳转的页是你的myPage.jsp
action重新定义一个,引用的方法是你的那个得到数据的方法。
------解决方案--------------------
问题的关键就集中在数据是否能让struts缓存和重新从数据库中取数据之间的权衡上,

个人建议, 你的从数据库中拉取数据的方法, 放在对应的set(get)方法中。
如name
....
getName() {
XxxxService.getName();
}

....

这样不管你的数据验证有没通过, 都会从库中取得数据。