1

我有两个控制器,每个控制器都有一个流程。在我的菜单中,我有一个指向流程的链接。如果我在流程#1 中并单击流程#2 的链接,Grails 将向我显示流程#1 的视图。

我发现使这种转换工作的唯一方法是拥有一个指向重定向到流的操作的链接。

class FirstController {
  def firstFlow = {
  }

  def toFirst() {
    redirect action: 'first'
  }

}

class SecondController {
  def secondFlow = {
  }
  def toSecond() {
    redirect action: 'second'
  }
}
  • 将正确/first/first显示视图。
  • 将要/second/second显示第一个视图
  • /second/toSecond重定向并正确显示视图。
  • Backing to/first/first显示第二个视图
  • Goingo to/first/toFisrt正确显示视图。

这是预期的行为吗?为什么流程没有转到正确的视图?

编辑

菜单是使用Platform Core Navigation API创建的。

navigation = {
  app {
    first(controller: 'first', action: 'first', title: 'nav.exportar')
    second(controller: 'second', action: 'second', title: 'nav.importar')
  }
}

链接

http://localhost:8080/my-application/first/first?execution=e14s1
http://localhost:8080/my-application/second/second?execution=e14s1
4

1 回答 1

0

如果我们想停止一个流程(比如点击菜单),我们需要告诉 webflow end-state

所以菜单链接 url 应该包含eventId表示end-state.

我不知道导航 api,但g:link下面的例子:

<g:if test="${params.action=='first'}"><%-- we are in first flow. --%>
    <g:link event="toSecond">Go to second</g:link>
</g:if>
<g:else><%-- we are not in first flow, normal link. --%>
    <g:link controller="second" action="second">Go to second</g:link>
</g:else>

和第一个控制器:

class FirstController {
    def firstFlow = {
        // view-state
        firstViewState {
            on('next').to 'nextAction'
            on('toSecond').to 'toSecond' // <g:link event='toSecond'> in gsp
        }

        // end-state
        toSecond() {
            redirect (controller:'second', action:'second')
        }
    }

    def toFirst() {
        redirect action: 'first'
    }
}
于 2014-02-25T04:43:42.973 回答