关于Action中ValidateXXX方法校验一次失败后\导致以后一直返回input视图的情况
2014-12-20 01:23
267 查看
问题:
使用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
使用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
相关文章推荐
- 关于创建COM组件时 返回 0x80040154 导致失败的一种情况
- 一次失败的尝试(上):原来GetCustomAttributes方法每次都返回新的实例
- Struts2输入校验以及错误信息处理(1)——用Action中定义的validate()方法进行校验
- struts2:数据校验,通过Action中的validate()方法实现校验(续:多业务方法时的不同验证处理)
- struts2:数据校验,通过Action中的validate()方法实现校验,图解
- 关于input的file框onchange事件触发一次失效的新的解决方法
- struts2两个input方法的action,出错后总是返回到Input页面的解决方法
- 关于input的file框onchange事件触发一次失效的新的解决方法
- init返回0说明初始化失败,其调用时间仅次与DllEntry,成多于一个的驱动程序实例时仅调用一次DllEntry,而xxx_Init会被调用多次,CreateFile与XXX_Open对应
- struts2:数据校验,通过Action中的validate()方法实现校验,图解
- 关于input的file框onchange事件触发一次失效的新的解决方法
- 解决struts验证失败后导致其他Action方法不能执行
- struts2 文件上传时,某次上传失败之后的所有上传都返回input,不跳到action
- struts2 提交表单后,不走action中的方法,直接返回input
- Struts2使用自带校验器应对单类多action方法及符合字段的情况
- struts2验证失败后返回input,select中list数据丢失解决方法
- 关于makefile中,一直显示“XXX is up to date”的解决方法
- struts2 文件上传时,某次上传失败之后的所有上传都返回input,不跳到action
- 关于ssh的action中return的input和success,导致页面乱跳转
- 关于.NET MVC4 Action 方法返回JsonResult和返回String类型的区别