struts2中采用url链接的action请求如何防止重复提交

有时action请求不使用form提交,而是url方式,如下:

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>

其中所带参数cabAffirmSession是用来接收和传递action里面put到session中的值
cabValue是放到session中的值

在struts2 action中要使用session,最好的方式是实现SessionAware,这样不用每次要用时都要采用ServletActionContext.getContext().getSession()这种方式得到session

 1public 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
12// 省略上面四个属性的get set方法
13
14    public void setSession(Map session) 
15           this.session = session; 
16        }
 
17
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
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
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
85


以上代码是进入页面的action时往session放一个随机数,double类型,提交请求的action中,判断页面带过来的值和session中是否相等,如果相等,移除session里的该值,执行操作;否则,返回另一个JSP页面

posted on 2009-07-02 14:51 心是莲花 阅读(1724) 评论(1)  编辑  收藏 所属分类: struts2

评论

# re: struts2中采用url链接的action请求如何防止重复提交 2012-08-01 14:56 sss

xsxsxsxs  回复  更多评论   

<2012年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

留言簿

文章分类

文章档案

搜索

最新评论