0

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はfillMemberページを1ページとして記憶します。したがって、戻るボタンは正しく機能しません。showCartを使用してプッシュバックすると、fillMemberページに移動します。戻るボタンをさらに押すと、fillGroupが返されます。すべてのfillMemberページを通過するために必要です。

同じ状態にリダイレクトした場合でも、Grails Webフローに実行パラメーターを変更させる方法はありますか?または、独自のパラメータをURLに入れることはできますか?

これを行うには、かなり醜い方法が1つ見つかりました。2つのfillMember状態(fillMember1とfillMember2)を使用します。どちらも同じことを行い、一方が他方にリダイレクトします。ただし、戻るボタンと進むボタンを押したときに実際の状態を区別できるようにするには、もう1つのアクション状態が必要です。この構成は機能しますが、もっと簡単な方法をお勧めします。

答えてくれてありがとう

トム

4

1 に答える 1

2

これまでのところ、私が見つけた唯一の解決策は、私が言及したものです。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をフローオブジェクトの現在の状態にマッピングしています。したがって、戻るボタンを数回押すと、処理中の現在のメンバーを簡単に区別できます。

于 2010-01-08T14:01:54.093 に答える