防止多次提交表单,见表单:
<s:form action="formAction"> <s:bean name="com.test.service.BookService" id="bs"></s:bean> <s:checkboxlist list="#bs.books" label="请选择喜欢的图书" name="b" listKey="author"
listValue="name" labelposition="top"></s:checkboxlist> <s:token/> <s:submit value="提交"/> </s:form>
加入<s:token/> 还要在<action>中定义拦截器
<action name="formAction" class="com.test.action.FormAction"> <interceptor-ref name="defaultStack"/> <interceptor-ref name="token"/> <result>success.jsp</result> <result name="invalid.token">/error.jsp</result> </action>
但拦截器判断为重复提交,则返回invalid.token,转到error.jsp
理解:
1、JSP使用<s:token/>标签的时候,Struts2会建立一个GUID(全局唯一的字符串)放在session中,并且会成为一个hidden放在form中。
2、token拦截器会判断客户端form提交的token和session中保存的session是否equals。如果equals则执行Action。否则拦截器直接返回invaid.token结果,Action对应的方法也不会执行