doOnceメソッドによる二重登録防止

Teedaでは、doOnceからはじまるメソッドをPageクラスに用意することで、二重登録防止を実現できます。


二重登録防止とは、例えば、「登録」→「確認」→「完了」のような画面仕様において、確認ページから完了ページの間で、insert処理をする際に、以下のイレギュラーケースに対策を施して、同じデータが重複して登録されることを避けることです。

  • 確認ページでダブルクリックする。
    (サーバ処理が遅いと、ユーザーはイライラして、ガンガン押してしまうのがコワい)
  • 登録完了後に、ブラウザの戻るボタンで確認ページへ行って、再度、登録ボタンを押す


Teedaで、二重登録防止をするには、doOnceから始まるメソッドを用います。たったこれだけです。上記の例だと、確認ページに、例えば、 doOnceRegister メソッドを用意するだけです。それだけで、HTMLファイルのHIDDENタグ、および、Session 内にトランザクショントークンが発効され、doOnceRegisterメソッドが呼ばれる直前に2つのトランザクショントークンを比較します。内容が同じであれば、doOnceRegisterメソッドを呼ぶ。内容が異なっていれば、doOnceRegisterメソッドを呼ばずに、完了ページに遷移します。


この2つのトランザクショントークンをチェックする仕組みで、「ダブルサブミット」と「戻って再登録」に対して、2重登録させないことを実現しています。「戻って再登録」を実施すると、2度目の完了画面にも関わらず、1件しかDBに登録されていない振る舞いになる。チェックに引っかかっても、エラー画面にせずに、メソッドを呼ばずに次の画面に遷移する仕組みが良いですね。逆に、2回目のリクエストでエラー表示する仕様だと、サーバ処理が遅いために、ダブルクリックした場合は、1件分の登録は成功しているにも関わらず、エラー画面が表示されるなんて状況になってしまいかねないので、よろしくない。