这样,当第二次提交该页面时,页面上得值与session中的就不一样了,这样便会返回input,提示重复提交了。
========下面是token.jsp代码==========
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>struts2防止重复提交</title> </head> <body> <s:actionerror cssStyle="color:red" /> <!--重复提交的提示信息--> <s:form action="doToken.action"> <s:textfield name="userName" ></s:textfield><br/> <s:token /> <!--保存本次token信息--> <s:submit></s:submit> </s:form> </body> </html>
========下面是struts.xml代码==========
<!--struts2防止重复提交:拦截器是action级别的,一旦配置该action下得所有请求都会经过此过滤器 --> <action name="doToken" class="com.TokenTestAction" method="doToken"> <result name="invalid.token">/token.jsp</result> <interceptor-ref name="defaultStack" /><!--如果自己加入了其他拦截器,则必须手动添加此拦截器,否则在action中会取不到表单的值--> <interceptor-ref name="token"/> </action>
========下面是TokenTestAction.java代码==========
package com; import com.opensymphony.xwork2.ActionSupport; public class TokenTestAction extends ActionSupport { private String userName; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String doToken() { System.out.println("提交成功了!输入的名字是:"+userName); return SUCCESS; } }
这样的话所展示出来的是默认的提示信息:
The form has already been processed or no token was supplied, please try again.
因为在struts-core.jar中可以找到struts-message.properties
之中有:
struts.messages.invalid.token=The form has already been processed or no token was supplied, please try again.的配置,也就是默认的提示信息。
但我们在用的时候肯定是要用自己定义的提示信息,配置的步骤如下:
在src下加入:
==========struts.properties==========
#国际化文件 struts.custom.i18n.resources=messageResources #(这个是资源文件的前缀,如果要是有文件目录就这样写xxxx.xxx...messageResources)
=========messageResources_zh_CN.properties====
#messageResources_zh_CN.properties #国际化编码方式: 从dos 进入进行编码可格式如:natice2ascii -encoding UTF-8 文件的全限路径+文件名 输出文件地址 #编过码的文件如:username=\u7528\u6237\u540d 是标准的UNICODE编码,将其拷贝到本文件中。 struts.messages.invalid.token = \u5bf9\u4e0d\u8d77\uff0c\u4e0d\u80fd\u91cd\u590d\u63d0\u4ea4
这里的\u5bf9\u4e0d\u8d77\uff0c\u4e0d\u80fd\u91cd\u590d\u63d0\u4ea4是我将"请不要重复提交"转码过来的。
这样的话,表单页面展示的信息将会变成"请不要重复提交"。
注意:这种防止重复提交是保存在session中,分布式环境下的web应用可能就不适用了。
工程结构图如下: