我遇到问题,让浏览器的后退按钮在网络流量上正常工作。 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上并推回,我会填写会员页面。进一步按下后退按钮返回fillGroup。我需要它来浏览所有的fillMember页面。
有没有办法强制Grails Web流程更改执行参数,即使我重定向到相同的状态?或者我可以将自己的参数放入URL吗?
我发现了一个非常难看的方法:使用两个fillMember状态 - fillMember1和fillMember2,两者都做同样的事情,一个重定向到另一个。但我还需要一个动作状态才能在击退和前进按钮时区分实际状态。这种结构有效,但我更喜欢更简单的方法。
感谢您的回答
汤姆
答案 0 :(得分: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与流对象的当前状态映射。因此,在几次后退按钮推动后,很容易区分出正在处理的当前成员。