博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struts2 + spring 关于validateXXX()验证失败后保存Form中数据的解决方案
阅读量:4223 次
发布时间:2019-05-26

本文共 930 字,大约阅读时间需要 3 分钟。

问题:
使用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://vygmi.baihongyu.com/

你可能感兴趣的文章
win下创建win32控制台工程,执行lua脚本
查看>>
cocos2dx android启动错误
查看>>
eclipse: android rename package name
查看>>
cocos2dx c++调用java思想
查看>>
lua math.ceil math.ceil
查看>>
cocos2dx CCNode计算node的大小
查看>>
cocos2dx 布局记录(1)
查看>>
lua 多行注释和取消多行注释
查看>>
缩放系数计算
查看>>
cocos2dx --- 按钮点击居中放大
查看>>
cocos2dx menu位置计算
查看>>
cocos2dx资源加载机制(同步/异步)
查看>>
cocos2dx C++调用java -- 字符串传递
查看>>
git学习网站
查看>>
JavaScript 学习网站
查看>>
cocos2dx java调用c++ -- 字符串传递
查看>>
CCScaleTo与CCScaleBy比较
查看>>
cocos2dx CCObject引用计数,内存释放分析(1)
查看>>
cocos2dx2.X 编译时,传递编译选项
查看>>
ccCArray.cpp 文件
查看>>