您的位置:首页 > 编程语言 > Java开发

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

2009-08-16 19:25 579 查看
有时action请求不使用form提交,而是url方式,如下:

<s:url id="cabApply" action="userAffirm"                               namespace="/assets/businessChange">
<s:param name="cabinetId" value="%{cbCabinetsExeBO.id}"/>
<s:param name="formId" value="%{changeApplyFormBO.id}" />
<s:param name="subApplyExeType" value="%{'CABI'}" />
<s:param name="cabAffirmSession" value="#session.cabValue"/>
</s:url>
<s:a href="%{cabApply}" mce_href="%{cabApply}" cssClass="buttonBlue">用户确认</s:a>


 

 

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

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

 

public class CBApplyEditAction extends ActionSupport implements SessionAware{
private Map session;
/** *//** 用户确认action防止重复提交的URL所带参数名 */
private String cabAffirmSession;

private String moniAffirmSession;

private String netAffirmSession;

private String sysAffirmSession;

// 省略上面四个属性的get set方法

public void setSession(Map session) {
this.session = session;
}

public String seeChBusiness() throws Exception {
// 往session中放值
session.put("cabValue", Math.random() + "");
session.put("moniValue", Math.random() + "");
session.put("sysValue", Math.random() + "");
session.put("netValue", Math.random() + "");

return "seeChBusiness";
}

public String userAffirm() throws Exception {
if (EChangeBusinessCategory.CABINETS_DEMAND.getKey().equals(
subApplyExeType)) {
// 将所带参数提交的值和session中的值比较
String obj = (String) session.get("cabValue");
if(cabAffirmSession!=null&&cabAffirmSession.equals(obj)){
session.remove("cabValue");
chBusiness.updateCabinetExecuteStatus(cabinetId,
EChangeStatus.UserConfirm.getKey());
return SUCCESS;
}else{
return "invalid";
}

}
if (EChangeBusinessCategory.MONITOR_DEMAND.getKey().equals(
subApplyExeType)) {
String obj = (String) session.get("moniValue");
if(moniAffirmSession!=null&&moniAffirmSession.equals(obj)){
session.remove("moniValue");
chBusiness.updateMonitorExecuteStatus(monitorId,
EChangeStatus.UserConfirm.getKey());
return SUCCESS;
}else{
return "invalid";
}
}

if (EChangeBusinessCategory.NETWORK_DEMAND.getKey().equals(
subApplyExeType)) {
String obj = (String) session.get("netValue");
if(netAffirmSession!=null&&netAffirmSession.equals(obj)){
session.remove("netValue");
chBusiness.updateNetworkExecuteStatus(networkId,
EChangeStatus.UserConfirm.getKey());
return SUCCESS;
}else{
return "invalid";
}
}

if (EChangeBusinessCategory.SYSTEM_SETUP.getKey().equals(
subApplyExeType)) {
String obj = (String) session.get("sysValue");
if(sysAffirmSession!=null&&sysAffirmSession.equals(obj)){
session.remove("sysValue");
chBusiness.updateServerExecuteStatus(serverId,
EChangeStatus.UserConfirm.getKey());
return SUCCESS;
}else{
return "invalid";
}
}

return SUCCESS;
}


 

 

以上代码是进入页面的action时往session放一个随机数,double类型,提交请求的action中,判断页面带过来的值和session中是否相等,如果相等,移除session里的该值,执行操作;否则,返回另一个JSP页面
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息