項目中用到struts2的s:token標籤處理表單重複提交問題,在這對s:token的用法用配置做簡單介召。因爲我只針對某個特定action進行重複提交驗證,所以在這隻介召針對單個action進行重複提交驗證方法。
1):在jsp頁表form中添加<s:token/>標籤,他會自動生成如如下代碼:
<input type="hidden" name="struts.token.name" value="struts.token"/>
<input type="hidden" name="struts.token" value="7GXL55LPSGU19SDC9D3VP54I20XT3BVA"/>
2):在需要證驗的action添加,token攔截器,和name=invalid.token的result
<action name="createOperator" class="operatorAction" method="createOperator">
<interceptor-ref name="token" />
<interceptor-ref name="myDefaultStack" />
<result name="success_region" type="redirect">
/pageerror.jsp
</result>
<result name="invalid.token">/pageerror.jsp</result>
<result name="success" type="redirect-action">
operatorEnter
</result>
<result name="error">/WEB-INF/jsp/operator/add.jsp</result>
</action>
在提交表單時,struts2會對token值進行驗證,如果發現token的值不等於服務器保存的值,就認爲重複提交,struts2會自動跳轉到,name="invalid.token" result中,並把錯誤信息封裝到actionerror中。
s:token使用中容易出現的錯誤 :
java.lang.NullPointerException
org.apache.struts2.util.TokenHelper.setToken(TokenHelper.java:71)
org.apache.struts2.components.Token.buildToken(Token.java:114)
org.apache.struts2.components.Token.evaluateExtraParams(Token.java:96)
org.apache.struts2.components.UIBean.evaluateParams(UIBean.java:856)
R:strut2的filter過濾器中配置了<dispatcher>FORWARD</dispatcher>,改爲
<% response.sendRedirect("");%>
跳轉即可。轉自:http://ldzyz007.iteye.com/blog/654374