ブラウザのバックボタンでのGrailsのWebフローの問題
-
19-09-2019 - |
質問
私は、Webフローに適切にブラウザの戻るボタンの仕事を得るために問題を抱えています。 Grailsのバージョンは1.1.2です。 サンプルコードを想像します:
def someFlow = {
...
fillGroup {
on("addMember"){
...
}.to "fillMember"
}
fillMember {
on("addMember") {
...
}.to "fillMember"
on("goToCart").to "showCart"
}
showCart {
...
}
}
さて、私はグループ、いくつかの(> 1)メンバーを追加し、カートに行きます。問題は、メンバーを充填中にURLが同じままであることです。 URL実行パラメータには、専用の状態(ビュー)変更された場合に変更します。
URLは変更されませんので、だから、Firefoxは1ページとしてfillMemberページを記憶しています。従って、戻るボタンが正しく動作しません。私はshowCartの午前と押し戻した場合、私はfillMemberページを取得します。戻るボタンのさらなるプッシュfillGroupを返します。私はそれがすべてfillMemberページを通過する必要があります。
私は同じ状態にリダイレクトにもかかわらず、実行パラメータを変更するにはGrailsのウェブの流れを強制する方法はありますか?それとも私は、URLの中に自分のパラメータを置くことができますか?
私はそれを行うにはどのように1はかなり醜い方法を見つけた:2 fillMemberを使用述べて - fillMember1とfillMember2を、両方とも同じことをやって、1は別のにリダイレクトします。しかし、私は戻る]ボタンや[進む]ボタンを押す時に実際の状態を区別できるようにするには1より多くのアクションの状態を必要としています。この構築物は動作しますが、私は簡単な方法を好むだろう。
すべての答えてくれてありがとう。
トム
解決
これまでのところ、私が見つけた唯一の解決策は、私が述べたものです。いくつかの状態情報を保持するために、両方まったく同じことをやって2つのビューステート、および1つのアクションの状態を使用します(適切に処理されずにメンバーを区別することは困難であろう)。コードは次のようになります。
def someFlow = {
...
fillGroup {
on("addMember"){
...
}.to "fillMemberLogic"
}
fillMemberLogic {
action {
...
flow.stateinf += 1
if(flow.stateinf%2 == 1)
return gotoFillMember1()
else
return gotoFillMember2()
}
on("gotoFillMember1").to "fillMember1"
on("gotoFillMember2").to "fillMember2"
}
fillMember1 {
on("addMember") {
...
}.to "fillMemberLogic"
on("goToCart").to "showCart"
}
fillMember2 {
on("addMember") {
...
}.to "fillMemberLogic"
on("goToCart").to "showCart"
}
showCart {
...
}
}
ビューは、すべてのメンバーのために変更されているので、、実行パラメータも変更され、URLは、すべてのメンバーのために区別されます。 FirefoxはURLに応じて表示したページを区別するので、あなたは戻る]ボタンや[進む]ボタンを使用して、すべてのメンバーを前後に行くことができます。
のWebフローは、フローオブジェクトの現在の状態とのマッピングURLです。そのためには、いくつかのバックボタンを押した後、あなたが処理している現在のメンバーを区別することが容易に可能です。