kxbin
          成功留給有準備的人
          posts - 10,  comments - 35,  trackbacks - 0
          1》防止多次點擊“提交”,讓多次“提交”變成只一次“提交”
          saveToken(rquest)
          的目的是頁面上的按鈕只相應一次,比如說,在頁面上有個新增按鈕,如果你連續點擊數次,后臺程序可能會響應n次,加了這句話,在頁面
          上自動生成一個hidden變量
          2》防止頁面重復提交
          利用同步令牌(Token)機制來解決Web應用中重復提交的問題,Struts也給出了一個參考實現。
            基本原理: 
            服務器端在處理到達的請求之前,會將請求中包含的令牌值與保存在當前用戶會話中的令牌值進行比較,看是否匹配。在處理完該請求后
          ,且在答復發送給客戶端之前,將會產生一個新的令牌,該令牌除傳給客戶端以外,也會將用戶會話中保存的舊的令牌進行替換。這樣如果用
          戶回退到剛才的提交頁面并再次提交的話,客戶端傳過來的令牌就和服務器端的令牌不一致,從而有效地防止了重復提交的發生。 
            if (isTokenValid(request, true)) {
            
            // 表單不是重復提交
            
            //這里是保存數據的代碼
            
            } else {
            
            //表單重復提交
            
            saveToken(request);
            
            //其它的處理代碼
            
            }
           
           
          網上例子為證:
              public ActionForward execute(ActionMapping mapping, ActionForm form,
                      HttpServletRequest request, HttpServletResponse response) {
                  UserForm userForm = (UserForm)form;
                  if(!isTokenValid(request)){         
                      saveToken(request);
                      userForm.setMessage("重復提交");
                      return mapping.findForward("failure");
                  }
                  else{
                      resetToken(request);
                  }
                  request.setAttribute("user", userForm);
                  return mapping.findForward("success");
              }
          }
          模板經典例子:
          public ActionForward save(ActionMapping mapping, ActionForm form,
             HttpServletRequest request, HttpServletResponse response)
             throws BaseException {
            if (!isTokenValid(request)) { // 如果指令無效,則屬于重復提交
             return (new ActionForward(mapping.getInput()));
            } else {
             resetToken(request);
            }
            BaseDao dao = DAOFactory.getDao(getEntityDAOClassName());
            dao.begingTransaction();
            Class cls = dao.getEntityClass();
            try {
             BaseVO vo = (BaseVO) cls.newInstance();
             
             DataTrans.copyProperties(vo, form);
             this.saveEx(mapping, form, request, response, vo);
             dao.save(vo);
             dao.commitTransaction();
            } catch (Exception e) {
             dao.rollback();
             throw new BaseException("保存數據出現異常");
            } finally {
             dao.sessionClose();
            }
            return mapping.findForward("saveSuccess");
           }
          posted on 2011-12-02 09:32 kxbin 閱讀(766) 評論(0)  編輯  收藏 所屬分類: J2EE
          你恨一個人是因為你愛他;你喜歡一個人,是因為他身上有你沒有的;你討厭一個人是因為他身上有你有的東西;你經常在別人面前批評某人,其實潛意識中是想接近他。

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(5)

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          J2EE

          java技術網站

          Linux

          平時常去的網站

          數據庫

          電影網站

          網站設計

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 铁力市| 定兴县| 正镶白旗| 双牌县| 佳木斯市| 洛扎县| 石城县| 全州县| 内丘县| 安平县| 开原市| 宁远县| 汉源县| 西吉县| 阿图什市| 三穗县| 永丰县| 五河县| 锦州市| 嵊泗县| 桓仁| 澜沧| 彩票| 宜章县| 柳林县| 新巴尔虎右旗| 崇阳县| 璧山县| 鸡泽县| 万州区| 平遥县| 三台县| 达日县| 寿宁县| 永寿县| 太原市| 沁源县| 应城市| 广饶县| 邵东县| 东方市|