如何使用glink标签在grails webflow插件中从一个视图状态转到另一个视图状态?

时间:2014-09-30 17:15:28

标签: grails

我有以下带有2个视图状态的webflow表示

def createFlow = {
  startState {
    on("addItem"){
      //do something
    }.to "startState"

    on("deleteItem"){
      //do something
    }.to "startState"
  }

  secondState {
    on("addItem"){
      //do something
    }.to "startState"

    on("deleteItem"){
      //do something
    }.to "startState"
  }
}

在每个视图状态中,我希望有一个glink标记来互相调用,我尝试了这个解决方案但没有成功

<g:link action="create" event="startState">Start</g:link>
<g:link action="create" event="secondState">Second</g:link>

我得到了

  

在流'purchaseOrder / create'的状态'startState'中没有发现事件'startState'的转换 - 有效的过渡条件是数组[addItem,deleteItem] - 可能是程序员错误,请检查TransitionCriteria的集合状态

我的问题是,可以从glink标签调用自我查看状态或其他视图状态吗?

感谢您的时间

1 个答案:

答案 0 :(得分:0)

可以使用g:link来触发事件。

您的网络流的结构应该是这样的:

def createFlow = {
  startState {
    on("goToSecond"){
      //do something
    }.to "secondState"
  }

  secondState {
    on("goToStart"){
      //do something
    }.to "startState"
  }
}

在create / startState.gsp

<g:link action="create" event="goToSecond">Second</g:link>

在create / secondState.gsp

<g:link action="create" event="goToStart">Start</g:link>

关键是:

  1. 您总是处于某个州,每个州都可以处理一个或多个事件。
  2. 您发出导致当前状态事件处理程序触发的事件,并且如果您设置了这种方式,则会移动到另一个状态。
  3. 每个州都有一个视图,您可以使用g:submit或g:link。
  4. 来表示事件

    在您的情况下,当您真正想要发出事件名称信号时,您正试图直接发出状态信号。此外,您似乎试图从单个视图中执行此操作。可以将单个视图绑定到多个状态(使用视图覆盖或使用模板),但这样做并没有多大意义。