首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

重复提交表单解决思路

2014-01-08 
重复提交表单什么是重复提交所谓重复提交,就是用户在页面多次点击提交按钮,或者通过不断刷新页面,把已经提

重复提交表单
什么是重复提交
所谓重复提交,就是用户在页面多次点击提交按钮,或者通过不断刷新页面,把已经提交过的数据多次向后台提交。
重复提交对于查询类的功能,问题还不是太大,但是对于新增或是修改类的功能,就有可能凭空的出现很多同样信息的重复数据,从而导致业务功能出现错误。
用一个实例来让大家体会一下重复提交的问题,来实现一个订单新增的功能,订单号一般都是由后台自动生成,前台页面只要传递订购人、订购商品和订购数量等订单的具体信息过来就可以了。为了示例的简洁,只是从前台传递一个订购的商品和一个订购的数量,一共两个值就可以了,就不去处理什么订单的主记录、子记录等复杂的功能了。
1:实现Action
写一个处理订单的Action,接收前台传递过来的数据,然后输出即可。为了表示会花一定的时间来进行业务处理,在execute方法里面,让线程休息6秒,示例代码如下:
 
java代码:
查看复制到剪贴板打印
public class TokenAction extends ActionSupport{  
    private String productId;  
    private int orderNum;  
      
    public String getProductId() {  
        return productId;  
    }  
    public void setProductId(String productId) {  
        this.productId = productId;  
    }  
    public int getOrderNum() {  
        return orderNum;  
    }  
    public void setOrderNum(int orderNum) {  
        this.orderNum = orderNum;  
    }  
    public String execute() throws Exception {  
        System.out.println("预定的产品编号是:"+this.productId+",预定数量为:"+this.orderNum);   
        Thread.sleep(6000L);  
        System.out.println("处理完成!");  
        return SUCCESS;  
    }  
}  
2:配置Action
在struts.xml中配置Action,示例如下:
 
java代码:
查看复制到剪贴板打印
<package name="helloworld" extends="struts-default">  
    <action name="tokenAction" alt="重复提交表单解决思路" />
[解决办法]
之前遇到过重复提交的事情,主要是后台响应比较慢。
页面上把按钮的click事件绑定上去,点击按钮后,移除click事件,页面上将不再重复提交事件。
[解决办法]
采用令牌方式  <s:token />
<s:form action="/tokenAction.action" method="post">  
    <s:token></s:token>
    <s:textfield name="productId" label="预定的产品编号"/>  
    <s:textfield name="orderNum" label="预定的数量"/>  
    <s:submit value="提交"/>  
</s:form>
你上网搜一下这个标签,这是struts2的一个标签




[解决办法]
令牌方式比较可取。。

热点排行