弹出窗口Session丢失防止表单重复提交问题
Posted airen123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了弹出窗口Session丢失防止表单重复提交问题相关的知识,希望对你有一定的参考价值。
一、弹出窗口Session丢失问题
弹出窗口Session丢失
使用window.showModalDialog进行信息的提示,相当方便,也容易控制外观和布局。但是存在一个严重的问题,就是Session丢失。当在A页面进行showModalDialog时,弹出的模态窗口open新页面或new dialog()时,会得不到A页面中的Session,这样就严重地限制了他的使用范围。
进一步的使用模式窗口可以发现session的丢失总是便随页面的刷新
1.在普通页面中弹出模式窗口且进行new dialog()操作时 会造成该进程中所有页面session的丢失
2.在模式窗口嵌套使用时 弹出的模式窗口并不会使父模式窗口的session丢失 但是会取不到父模式窗口的值
3.在弹出的模式窗口中使用js脚本需要验证表单时 如果出现return true or false之类的语句,会造成模态窗口session的丢失。
用showModalDialog经常出现这样那样奇怪的问题,因此最好少用showModalDialog。替代的方法就是用DIV来模拟实现模式窗口相同的功能。
二、防止表单重复提交
<s:token/>标签防止重复提交:
1、在表单中加入<s:token/>
<s:form action="helloworld_other" method="post" namespace="/test">
<s:textfield name="person.name"/><s:token/><s:submit/>
</s:form>
2、配置拦截器
<action name="helloworld_*" class="cn.itcast.action.HelloWorldAction" method="{1}">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="token"/>
<result name="invalid.token">input.jsp</result>
<result>/WEB-INF/page/result.jsp</result>
</action>
当token拦截器在会话的token与请求的token不一致时,将会直接返回invalid.token结果。
在debug状态控制台出现下面信息,是因为Action中并没有struts.token和struts.token.name属性,不必关心。
严重:Parametersinterceptor-[setParameters]:UnexpectedException caughtsetting‘struts.token‘on‘class xxx:Error‘...
严重:ParametersInterceptor-[setParameters]:....
以上是关于弹出窗口Session丢失防止表单重复提交问题的主要内容,如果未能解决你的问题,请参考以下文章