Chinaunix首页 | 论坛 | 博客
  • 博客访问: 367007
  • 博文数量: 28
  • 博客积分: 455
  • 博客等级: 下士
  • 技术积分: 445
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-09 11:10
文章分类

全部博文(28)

文章存档

2016年(5)

2014年(1)

2013年(10)

2011年(7)

2010年(5)

我的朋友

分类: Web开发

2013-11-14 17:23:03

Jquery form插件ajaxSubmit提交,采用annotation的struts2,防止重复提交


1、服务器端action

点击(此处)折叠或打开

  1. @ParentPackage("json-default")
  2. public class XxxAction extends ActionSupport {
  3.     // json 返回对象
  4.     private JsonRet jsonRet;
  5.     // invalid token json返回对象,
  6.     private JsonRet invalidTokenJsonRet = new JsonRet("invalidToken");


  7.     @Action(value="/vote",
  8.         interceptorRefs={@InterceptorRef("defaultStack"),@InterceptorRef("token")},
  9.         results={
  10.             @Result(name=SUCCESS,type="json",params={"root","jsonRet","contentType","text/html","enableGZIP","true","noCache","true"}),
  11.             @Result(name="invalid.token",type="json",params={"root","invalidTokenJsonRet","contentType","text/html","enableGZIP","true","noCache","true"})
  12.         }
  13.     )
  14.     public String vote(){
  15.         jsonRet = new JsonRet("OK");
  16.         try {
  17.         } catch (Exception e){
  18.             e.printStackTrace();
  19.             jsonRet.setError("ERROR");
  20.         j    sonRet.setMsg(e.getMessage());
  21.         }
  22.         return SUCCESS;
  23.     }
  24. }

主要就是在@InterceptorRef("defaultStack")后面增加了一个@InterceptorRef("token")

results增加一个@Result(name="invalid.token".....


2、客户端form
首先jsp文件页首不要忘记添加struts2标签

点击(此处)折叠或打开

  1. <%@ taglib prefix="s" uri="/struts-tags" %>



form定义: 就是增加另一个 s:token 标签

点击(此处)折叠或打开

  1. <form id="form-vote" action="vote.action" method="post">
  2. <input type="hidden" name="id" id="voteId"/>
  3. <s:token/>
  4. </form>


3、ajaxSubmit代码

// 采用submit form来投票 

点击(此处)折叠或打开

  1. $('#form-vote').ajaxSubmit({
  2.     dataType: 'json',
  3.     success: function(data) {
  4.         if (data['status'] == 'OK'){
  5.             alert('投票成功');
  6.         } else if ( data['status'] == 'invalidToken') { // 重复提交,什么也不做,提高用户体验度,用户没啥感觉

  7.         } else {
  8.             alert("投票出错了\n"+data['msg']);
  9.         }
  10.     },
  11.     error: function(xhr) {
  12.         alert("投票出错了\n"+xhr['responseText']);
  13.     }
  14. });

用户如果重复提交,最终处理的结果只有一次,并且,他都没感觉到有重复提交
阅读(7265) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~