• 弹出窗口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]:....

  • 相关阅读:
    数据恢复:解决ORA600[kghstack_free2][kghstack_err+0068]一例
    Oracle latch闩原理示意图
    MySQL Query Analyzer查询分析器
    Oracle GoldenGate Monitor架构图
    Oracle Row cache lock图解
    没有Metalink账号的同学可以观赏下,My Oracle Support的主界面
    Oracle Goldengate Director软件截面图
    Oracle Unbreakable Enterprise Kernel Faster than Redhat?
    从Win32过渡到MFC
    naked 函数调用
  • 原文地址:https://www.cnblogs.com/airen123/p/9563896.html
Copyright © 2020-2023  润新知