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 执行参数才会更改。

因此 Firefox 将 fillMember 页面记住为一页,因为 URL 不会改变。因此后退按钮无法正常工作。如果我在 showCart 上并向后推,我会进入 fillMember 页面。进一步按下后退按钮返回 fillGroup。我需要它来浏览所有的 fillMember 页面。

即使我重定向到相同的状态,是否有任何方法可以强制 Grails Web 流更改执行参数?或者我可以将自己的参数放入 URL 中吗?

我发现了一种非常丑陋的方法:使用两个 fillMember 状态 - fillMember1 和 fillMember2,两者都做同样的事情,一个重定向到另一个。但是我需要一个动作状态才能在点击后退和前进按钮时区分实际状态。这个结构有效,但我更喜欢更简单的方法。

感谢您的任何回答

汤姆

4

1 回答 1

2

到目前为止,我找到的唯一解决方案就是我提到的那个。使用两个视图状态,两者都做完全相同的事情,一个动作状态来保存一些状态信息(没有它很难正确区分处理的成员)。代码将是这样的:

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 回答