1. 程式人生 > >彈出窗口Session丟失、防止表單重復提交問題

彈出窗口Session丟失、防止表單重復提交問題

bmi 發現 show post 限制 orm 並不會 xxx dialog

一、彈出窗口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丟失、防止表單重復提交問題