0

我对 Grails 还是比较陌生。我正在开发一个在线调查。我一直遇到 webflow 问题,我似乎无法在网上找到解决方案。我有一个班级调查,其中有很多主题,有很多问题。在我的网络流程中,主题和问题的数量是动态的,具体取决于您选择的调查。我的问题是如何迭代(在网络流中)每个主题和问题(有点像一个数组或列表),我可以在其中获取特定的主题和问题并将它们设置为流变量。例如,我会给我的调查和主题课程:

class Survey implements Serializable {

List topic
String surveyName
float version
static hasMany = [topic:Topic]

static constraints = {

    surveyName (blank:false)
}
}

和主题:

class Topic implements Serializable {

List primaryQuestion
String topicName
static belongsTo = [survey:Survey]
static hasMany = [primaryQuestion:PrimaryQuestion]


static constraints = {

    topicName (blank:false)
}
}

所以我设置了我的流变量

    onStart {
        flow.survey = Survey.get(params.id)
    }

那么如何在控制器中获取每个单独的主题和问题呢?我的目标是让一个视图用“下一个”和上一个“表示每个问题。根据我对 Web 流程的理解,我知道这是可能的。我只是不知道如何将单个问题传递给视图而不是同时遍历所有这些。

4

2 回答 2

0

如果我正确理解了您的问题,那么您需要做的就是遍历您的列表。首先,一个小费;在大多数情况下,您不需要将模型推入流范围。您可以简单地执行以下操作:

onStart {
  [survey : Survey.get(params.id)]
}

然后在你看来:

<g:each in="${survey.topic}" var="topic">
  <g:each in="${topic.primaryQuestion}" var="question">
     ...
  </g:each>
</g:each>

另一个提示,将主题重命名为您的调查域中的主题,并将primaryQuestion 重命名为主题中的primaryQuestions。这样更有意义。

如果我不在这里,您可能需要编辑您的问题并使其更清晰。

于 2012-07-28T21:47:32.843 回答
0

我终于通过 GORM 文档弄清楚了。这就是我一直在寻找的:

flow.topics = flow.survey ? Topic.findAllBySurvey(flow.survey) : []

这会将调查中的所有主题放入一个列表中,我可以使用以下方法获取每个主题:

onEntry{
    flow.topic = flow.topics.get(i)
}

再次感谢您的回复。

于 2012-07-29T18:02:51.297 回答