システム開発で思うところ

Javaで主にシステム開発をしながら思うところをツラツラを綴る

JSFで2重Submit対策(続)

前回やっていないこととした「入力画面まで戻ったFormの更新抑止」について対応をしてみました。

vermeer.hatenablog.jp

やっていないことで2つ目に挙げた案である

immediate を使うやり方です。

出来れば xhtmlに手を加えないやり方の方が良いかなぁ、と思っていたのですが 実際に記述してみて

  • まぁ、これくらいなら そこまで手が込んでいるわけではない

  • immediateの挙動は 基本的なJSFの仕様の範疇なので何が起こるのか想像しやすい

ということで、このやり方で良いだろう、と落ち着きました。

使用方法

情報を反映したくないアクションのトリガーに

immediate="#{doubleSubmitLifecycle.submitted}"

を記述します。

<p><input type="submit" value="確認"  jsf:action="#{doubleSubmitAction.fwConfirm()}" jsf:immediate="#{doubleSubmitLifecycle.submitted}"/></p>

実装

前回の時点で、すでに当該メソッドがありました。

public boolean isSubmitted() {
    return this.doubleSubmitState.isSubmitted();
}

実行結果

f:id:vermeer-1977:20180513101845p:plain

f:id:vermeer-1977:20180513101924p:plain

f:id:vermeer-1977:20180513102005p:plain

「戻る」→「戻る」で、入力画面まで戻ってユーザー名を更新します。

f:id:vermeer-1977:20180513102136p:plain

f:id:vermeer-1977:20180513102206p:plain

確認画面で、ユーザー名が更新されていないことが確認できました。

Code

Bitbucket

さいごに

これくらいなら、前回の記事にまとめても良かったかも。。