2011年09月13日

processCallbacks status 2 の対策

以前に、processCallbacks status 2 が頻発する。で、色々と調べていたのだが、いただいたコメントで二度押しが原因だと判明した。また、ログアウトせずにブラウザを終了させた場合にも発生した。

幸いStrutsの同期トークン処理を入れていたので、登録、更新処理は正常終了しているが、

Tomcatでずーと警告を吐くのは気に入らないので、対策を行うことにした。

ということで、JavaScriptで二度押しのチェックを入れることにした。
(Strutsのtiles機能を利用していたので、基となるJSPに細工をすればできそう。)

このようはチェックの方法は、昔からある話題なので、様々なところで紹介もされている。

さて、今回はjQueryを使っているので、jQueryでスマートにできる方法を探してみた。

良さそうな方法で以下のページを見つけたので早速取り入れてみた。

http://neta.ywcafe.net/001046.html

動作確認をしてみると、disabledは効いているが、submitされず。。。

他の方法も試してみたが、disabledを利用する方法は全てsubmitされなかった。

挙動的にsubmit時に、既にボタンがdisabledになっているため無効になっている感じだ。

前に同じような手法を使っていたのだけどな?jQueryの仕業?それともブラウザか何かの仕様が変わったのだろうか?

とりあえず、ダメなので別の方法を考える。要は二度押しを防止できればいいのだ。

ということで、上記のscriptを弄って、falseを返す仕組みに変えた。

ダウンロード処理とかで画面遷移がないことも考慮して、1秒後にはsubmitができるようにもしてみた。

$.fn.checkOnSubmit = function(){

  var submitFlg = false;

  $(this).submit(function(){

    if(submitFlg == false){
      submitFlg = true;
      setTimeout(function(){submitFlg = false;},1000);
    }else{
      alert("二度押し判定");
      return false;
    }
  });

 return this;
};

呼び出し先。

$(function(){
  $('form').checkOnSubmit(); // 全てのformに作用させる場合
  //$('#hoge').checkOnSubmit(); // 特定のid属性をセットしたformタグに作用させる場合
  //$('.hoge').checkOnSubmit(); // 特定のclass属性をセットしたformタグに作用させる場合
});

この手法を使うと、うまくsubmitされた。

二度押しチェックも働いて、processCallbacks status 2は出なくなった!

お〜。長らく解決できなかった問題だっただけに結構嬉しい。

posted by hana at 20:28| Comment(0) | TrackBack(0) | Apache Software関連 | このブログの読者になる | 更新情報をチェックする