此拦截器只能用在有form的提交请求上。如果是通过url链接请求action,就只能手动控制了。请参考“struts2中采用url链接的action请求如何防止重复提交”
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9b8a8a44dd1c74ae49c20a7cd451974e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
要是不使用struts2的拦截器,如何防止表单重复提交呢?在struts2里面实现比较简单
1.在跳转到表单填写页面的action里面往session放一个值
public
String execute()
throws
Exception {
// 向session中放置一个值
ActionContext actionContext = ActionContext.getContext();
Map session = actionContext.getSession();
session.put( " session_value " , Math.random() + "" );
return SUCCESS;
}
// 向session中放置一个值
ActionContext actionContext = ActionContext.getContext();
Map session = actionContext.getSession();
session.put( " session_value " , Math.random() + "" );
return SUCCESS;
}
2.在表单填写页面加上接收session值的隐藏域,sub是定义在action里面的一个属性,提供get set方法即可
<
input type
=
"
hidden
"
name
=
"
sub
"
value
=
"
${session_value}
"
/>
3.在action提交的方法中判断页面提交过来的sub是否不为空,并且等于从session中取出的session_value的值
如果满足,先移除session里的那个值,再执行提交表单操作;如果不满足,就是重复提交,不会提交表单
public
String cbApplyFromSubmit()
throws
Exception {
// 将页面hidden提交的值和session中的值比较
ActionContext actionContext = ActionContext.getContext();
Map session = actionContext.getSession();
String obj = (String) session.get( " session_value " );
if (sub != null && sub.equals(obj)) {
session.remove( " session_value " );
// 保存数据
chBusiness.saveCBApplyForm(changeApplyFormBO);
return SUCCESS;
} else {
return " invalid " ;
}
}
// 将页面hidden提交的值和session中的值比较
ActionContext actionContext = ActionContext.getContext();
Map session = actionContext.getSession();
String obj = (String) session.get( " session_value " );
if (sub != null && sub.equals(obj)) {
session.remove( " session_value " );
// 保存数据
chBusiness.saveCBApplyForm(changeApplyFormBO);
return SUCCESS;
} else {
return " invalid " ;
}
}
有时action请求不使用form提交,而是url方式,如下:
其中所带参数cabAffirmSession是用来接收和传递action里面put到session中的值
cabValue是放到session中的值
在struts2 action中要使用session,最好的方式是实现SessionAware,这样不用每次要用时都要采用ServletActionContext.getContext().getSession()这种方式得到session
以上代码是进入页面的action时往session放一个随机数,double类型,提交请求的action中,判断页面带过来的值和session中是否相等,如果相等,移除session里的该值,执行操作;否则,返回另一个JSP页面
1
<
s:url id
=
"
cabApply
"
action
=
"
userAffirm
"
2 namespace = " /assets/businessChange " >
3 < s:param name = " cabinetId " value = " %{cbCabinetsExeBO.id} " />
4 < s:param name = " formId " value = " %{changeApplyFormBO.id} " />
5 < s:param name = " subApplyExeType " value = " %{'CABI'} " />
6 < s:param name = " cabAffirmSession " value = " #session.cabValue " />
7 </ s:url >
8 < s:a href = " %{cabApply} " cssClass = " buttonBlue " > 用户确认 </ s:a >
2 namespace = " /assets/businessChange " >
3 < s:param name = " cabinetId " value = " %{cbCabinetsExeBO.id} " />
4 < s:param name = " formId " value = " %{changeApplyFormBO.id} " />
5 < s:param name = " subApplyExeType " value = " %{'CABI'} " />
6 < s:param name = " cabAffirmSession " value = " #session.cabValue " />
7 </ s:url >
8 < s:a href = " %{cabApply} " cssClass = " buttonBlue " > 用户确认 </ s:a >
其中所带参数cabAffirmSession是用来接收和传递action里面put到session中的值
cabValue是放到session中的值
在struts2 action中要使用session,最好的方式是实现SessionAware,这样不用每次要用时都要采用ServletActionContext.getContext().getSession()这种方式得到session
1
public
class
CBApplyEditAction
extends
ActionSupport
implements
SessionAware
{
2
private Map session;
3
/** 用户确认action防止重复提交的URL所带参数名 */
4
private String cabAffirmSession;
5
6
private String moniAffirmSession;
7
8
private String netAffirmSession;
9
10
private String sysAffirmSession;
11![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
12
// 省略上面四个属性的get set方法
13![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
14
public void setSession(Map session) {
15
this.session = session;
16
}
17![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
18
public String seeChBusiness() throws Exception {
19
// 往session中放值
20
session.put("cabValue", Math.random() + "");
21
session.put("moniValue", Math.random() + "");
22
session.put("sysValue", Math.random() + "");
23
session.put("netValue", Math.random() + "");
24
25
return "seeChBusiness";
26
}
27![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
28
public String userAffirm() throws Exception {
29
if (EChangeBusinessCategory.CABINETS_DEMAND.getKey().equals(
30
subApplyExeType)) {
31
// 将所带参数提交的值和session中的值比较
32
String obj = (String) session.get("cabValue");
33
if(cabAffirmSession!=null&&cabAffirmSession.equals(obj)){
34
session.remove("cabValue");
35
chBusiness.updateCabinetExecuteStatus(cabinetId,
36
EChangeStatus.UserConfirm.getKey());
37
return SUCCESS;
38
}else{
39
return "invalid";
40
}
41![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
42
}
43
if (EChangeBusinessCategory.MONITOR_DEMAND.getKey().equals(
44
subApplyExeType)) {
45
String obj = (String) session.get("moniValue");
46
if(moniAffirmSession!=null&&moniAffirmSession.equals(obj)){
47
session.remove("moniValue");
48
chBusiness.updateMonitorExecuteStatus(monitorId,
49
EChangeStatus.UserConfirm.getKey());
50
return SUCCESS;
51
}else{
52
return "invalid";
53
}
54
}
55
56
if (EChangeBusinessCategory.NETWORK_DEMAND.getKey().equals(
57
subApplyExeType)) {
58
String obj = (String) session.get("netValue");
59
if(netAffirmSession!=null&&netAffirmSession.equals(obj)){
60
session.remove("netValue");
61
chBusiness.updateNetworkExecuteStatus(networkId,
62
EChangeStatus.UserConfirm.getKey());
63
return SUCCESS;
64
}else{
65
return "invalid";
66
}
67
}
68
69
if (EChangeBusinessCategory.SYSTEM_SETUP.getKey().equals(
70
subApplyExeType)) {
71
String obj = (String) session.get("sysValue");
72
if(sysAffirmSession!=null&&sysAffirmSession.equals(obj)){
73
session.remove("sysValue");
74
chBusiness.updateServerExecuteStatus(serverId,
75
EChangeStatus.UserConfirm.getKey());
76
return SUCCESS;
77
}else{
78
return "invalid";
79
}
80
}
81
82
return SUCCESS;
83
}
84![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
85
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
2
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
3
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
4
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
5
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
6
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
7
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
8
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
9
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
10
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
11
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
12
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
13
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
14
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
15
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
16
![](https://i-blog.csdnimg.cn/blog_migrate/ecedf933ec37d714bd4c2545da43add2.gif)
17
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
18
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
19
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
20
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
21
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
22
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
23
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
24
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
25
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
26
![](https://i-blog.csdnimg.cn/blog_migrate/ecedf933ec37d714bd4c2545da43add2.gif)
27
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
28
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
29
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
30
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
31
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
32
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
33
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
34
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
35
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
36
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
37
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
38
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
39
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
40
![](https://i-blog.csdnimg.cn/blog_migrate/ecedf933ec37d714bd4c2545da43add2.gif)
41
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
42
![](https://i-blog.csdnimg.cn/blog_migrate/ecedf933ec37d714bd4c2545da43add2.gif)
43
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
44
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
45
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
46
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
47
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
48
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
49
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
50
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
51
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
52
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
53
![](https://i-blog.csdnimg.cn/blog_migrate/ecedf933ec37d714bd4c2545da43add2.gif)
54
![](https://i-blog.csdnimg.cn/blog_migrate/ecedf933ec37d714bd4c2545da43add2.gif)
55
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
56
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
57
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
58
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
59
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
60
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
61
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
62
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
63
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
64
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
65
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
66
![](https://i-blog.csdnimg.cn/blog_migrate/ecedf933ec37d714bd4c2545da43add2.gif)
67
![](https://i-blog.csdnimg.cn/blog_migrate/ecedf933ec37d714bd4c2545da43add2.gif)
68
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
69
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
70
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
71
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
72
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
73
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
74
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
75
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
76
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
77
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
78
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
79
![](https://i-blog.csdnimg.cn/blog_migrate/ecedf933ec37d714bd4c2545da43add2.gif)
80
![](https://i-blog.csdnimg.cn/blog_migrate/ecedf933ec37d714bd4c2545da43add2.gif)
81
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
82
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
83
![](https://i-blog.csdnimg.cn/blog_migrate/ecedf933ec37d714bd4c2545da43add2.gif)
84
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
85
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
以上代码是进入页面的action时往session放一个随机数,double类型,提交请求的action中,判断页面带过来的值和session中是否相等,如果相等,移除session里的该值,执行操作;否则,返回另一个JSP页面