【问题标题】:Grails GORM web flow iterating through hasMany references遍历 hasMany 引用的 Grails GORM web 流
【发布时间】:2012-07-30 02:02:51
【问题描述】:

我对 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 流程的理解,我知道这是可能的。我只是不知道如何将单个问题传递给视图而不是同时遍历所有这些。

【问题讨论】:

    标签: grails reference grails-orm spring-webflow


    【解决方案1】:

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

    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。这样更有意义。

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

    【讨论】:

    • 我了解如何使用 标签遍历它。但是,如果我只想在每个视图中显示一个问题怎么办?或者更准确地说,有一个具有“下一个”和“上一个”按钮的 Web 流程,可以一次浏览一个问题。我想知道如何在控制器而不是 GSP 中挑选出个别问题。如果我这样做,我将在一个视图中查看所有主题和问题。我不想要那个。另外,你的名字是对的,我可能应该改变它们。
    【解决方案2】:

    我终于通过 GORM 文档弄明白了。这就是我要找的:

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

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

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

    再次感谢您的回复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-02
      相关资源
      最近更新 更多