数据重复提交

我想知道哈,大伙们你在做应用程序的时候,遇到防止数据的重复提交。是如何处理的。你们能简单介绍哈自己是如何实现的嘛?谢谢!

今天都没有人回答。我想我也是无理取闹了,因为这类似的问题解决思路都是一样的。肯定在客户端去判断是不科学的,也完全没有效果的,所以必须在服务器里面进行判断。所以在开始的时候就不需设置标识符,在页面里面设置隐含值,在进行校对。
恩我还是不用自己去实现,那有点累赘,在webwork啊,stuts1和struts2里面都有相应的方法给我们采用。我就不一一去叙述了。贴一些网上的代码ok:
A、webwork:1.定义你自己的拦截器栈:
<interceptors>
<interceptor-stack name="submitToken">
<interceptor-ref name="token-session"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>

2.在需要防止重复提交的action里添加刚刚定义的拦截器栈,像这样:
<action name="sendMessage" class="net.jbbs.webwork.MessageAction" method="send">
<result name="success" type="dispatcher">
<param name="location">getMessagesList.action?type=sendbox</param>
</result>
<result name="fail" type="dispatcher">
<param name="location">sendMessage.jsp</param>
</result>
<result name="invalid.token" type="dispatcher">
<param name="location">sendMessage.jsp</param>
</result>
<interceptor-ref name="submitToken"/>
</action>

3.修改相应的包含提交表单的jsp文件,在这里是sendMessage.jsp:
<ww:token name="sendMessageToken"/>

B、struts1:
1、在跳转新增页面的时候执行的action方法中其中写入代码:saveToken(request);
2、写入数据提交表单的action,作如下处理
if(!isTokenValid(request, true)){
resetToken(request);
System.out.println("不能重复提交");
}else{
saveToken(request);
System.out.println("能提交");
}

C、struts2:
1.加入<s:token>标签
在<s:form ...></s:form>中加入

<s:token></s:token>

<s:token name="hello"></s:token>

将会生成
<input type="hidden" name="struts.token.name" value="hello">
<input type="hidden" name="hello" value="DBFIPUA0IFVGS9..." />


2.加入拦截器
在struts.xml中的action中加入token拦截器

<interceptor-ref name="token"></interceptor>
<interceptor-ref name="defaultStack"></interceptor>


3.配置 结果页面
在struts.xml的action中加入result,name为invalid.token

<result name="invalid.token">/registor.jsp</result>


4.显示出错信息
<s:actionerror cssStyle="color:red"/>


5.修改默认的出错信息

默认信息在struts-messages.properties中

struts.messages.invalid.token="The form ..."

在自定义的message_zh_CN.properties中替换

struts.messages.invalid.token=请不要重复提交表单
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值