在实际应用当中我们经常会遇到在客户端表单会重复提交问题,发生重复提交表单的原因有以下几点:
1、多次点击submit按钮
2、在提交后多次刷新页面
3、URL回车
struts2在使用的过程中会出现表单重复提交的问题,这一问题在某些场合将会造成非常严重的后果。如何避免这一问题的发生,以下有三种方法可以解决。
- 改变result的type类型为redirect
struts2 的默认result类型为dispatcher,当用户将信息提交到服务器,服务器响应采用forward方式调转到下一个页面后,此时地址栏中显示的是 上个页面的URL,若刷新当前页面,浏览器会将再次提交用户先前输入的数据,就会再次出现表单重复提交的问题。如果选择redirect方式跳转页面,这 样就不会出现重复提交的问题;
缺点:redirect跳转无法满足开发过程中的一些需求。
- 采用令牌方式 <s:token />
- <form id="login_form" method="post" action="userAction!login">
- <s:token></s:token>
- 用 户<input type="text" name="username" placeholder="输入教工号或学号" />
- 密 码<input type="password" name="password" placeholder="输入密码" />
- <div id="btn">
- <a id="loginbutton" href="javascript:void(0)" onclick="login_submit()">登录</a>
- <a href="javascript:void(0)" onclick="login_reset()">清空</a>
- </div>
- </form>
- <action name="userAction" class="com.yingjun.sharing.action.UserAction" >
- <interceptor-ref name="myStack" />
- <interceptor-ref name="token" />
- <result name="invalid.token">/WEB-INF/jsp/login.jsp</result>
- <result name="input">/WEB-INF/jsp/register.jsp</result>
- <result name="regsuccess">/WEB-INF/jsp/login.jsp</result>
- </action>
- 采用令牌方式2 <s:token />
- <action name="userAction" class="com.yingjun.sharing.action.UserAction" >
- <interceptor-ref name="tokenSession" >
- <param name="includeMethods">register</param>
- </interceptor-ref>
- <interceptor-ref name="myStack"/>
- <result name="input">/WEB-INF/jsp/register.jsp</result>
- <result name="regsuccess">/WEB-INF/jsp/login.jsp</result>
- </action>