关于Action中ValidateXXX方法校验一次失败后\导致以后一直返回input视图的情况

问题:
    使用struts2的validateXXX()进行验证,出错后自动返回之前的画面,但是Form中的数据全部丢失了,如何才能保存出错前的Form是要解决的问题。

调查:
    调查后发现如果把Action的scope设置成session就应该可以在session范围内保存Form数据,但是struts2不支持直接设定Action的scope属性,没关系,有办法,因为把bean的注入交给了spring容器,spring自然可以管理它自己的bean,只需要在spring的配置文件中定义Action的bean的时候把scope设置为session就可以了。
    如果在spring中定义bean时指定scope为session,那么请小心使用struts2的Action中的validateXXX()方法,因为校验出错的状态会一直保存直到session结束(当然这是因为struts2的默认拦截器在作怪)。

解决方案:
STEP 1:
    定义bean的作用域为session (注1)
    例:  <bean id="LoginAction" class="testLogin.action" scope="session">
                <property name....../>
          </bean>
STEP 2.
    因为校验的错误状态ActionError会在session范围内保存,导致每次的Action请求会直接跳转到input视图。以下准备了两种解决办法
    ①重写默认的负责校验的拦截器。
    ②放弃使用validateXXX()这个方法,在Action中进行校验,使用ActionMessage代替ActionError。

注1:同时不要忘记在web.xml中追加一个监听。
    <listener>
        <listener-class>
                org.springframework.web.context.request.RequestContexgListener
        </listener-class>
    </listener>

ok,到此为止问题已经解决,需要说明的是,解决问题的办法并不只是这一种,根据具体情况可以采用不同的方法,例如通过hidden项目传递Form就是一种不错的方法。


原文链接:http://tjmljw.iteye.com/blog/1446639

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值