PageReferenceのsetRedirect(false)

参照

salseforceでフォームを作成している際、

完了画面を表示させた後にブラウザで戻るボタンを押すと、
フォームや確認画面に戻ってしまい、更に入力した内容が表示されてしまう。

このまま何も対策を取っていないと、二重送信されてしまうおそれがあるので、
対策を考えてみた。

基本的な考え方は以下の通り。

セッションとhistory.back()とブラウザの戻るボタン。

まずは、上記と同じように、一度送信が完了した段階で、
それとわかるフラグを立てておきます。
再度入力画面を表示させようとすると、このフラグが立った状態だとエラー画面へ遷移するように設定しておきます。

しかし、salseforceでデフォルトの設定のまま(?)作業すると、
戻るボタンを押した際には、キャッシュされたページが表示されます。
(入力された値も含めて)

なので、キャッシュを無効にして、ページが無条件で表示されないようにします。
入力ページの冒頭に以下の設定を入れます。

<apex:page . . .  cache="false" >

こうすると、完了画面に遷移後、この入力ページへ戻ってくると、
「フォーム内容を再送信して下さい。」のような画面が表示され、リロードせざる得なくなります。
そうすることで、フラグを判定してエラーページへ遷移させることが出来ました。


この事を調査している時に知ったのですが、
(基本的な事のようですが、)
setRedirectを利用すると、値を引き継ぐか、URLを変更するか、が選べるようです。

画面遷移する際にPageReferenceのsetRedirect(false)を使用することで変数の値を引き継ぐことができます。
– SFDC:2つのVFページと同一コントローラ

デフォルトではfalseに設定されているようです。
なので、確認画面への遷移などでは、URLは変わらず、同一コントローラー内の値も引き継がれます。
しかし、完了画面への遷移の際は値は必要なく、URLも変わって欲しいので、上記をtrueで遷移させた方が良さそうです。

//apexクラスの関数内で
return Page.FormComplete.setRedirect(true);

しかしこれをしてしまうと、最初に書いた判定用のフラグの値も引き継がれないので、
逆に値がなければエラー、という流れで作ったほうがいいかもしれません。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值