我从Grails开始,我不知道如何面对以下用例。
该应用程序是关于运动结果预测,所以我在我的域“匹配”和“预测”,我想有一个视图,用户可以更新尚未播放的匹配的所有预测。
到目前为止,我已经在我的“PredictionController”中定义了一个方法,该方法搜索所有已经存在的必须播放的游戏预测,并为日期高于现在的任何新匹配生成新的预测实例。我已经为该方法创建了一个视图,并且我正确地得到了我应该完成或更新的所有预测,并且我已经在我的控制器中定义了另一种形式sumbission的方法(所以我试图在“创建”和“更新”脚手架方法的工作方式相同。
我的问题是,如何访问我视图修改的所有预测?如何将所有预测发送到我的更新方法?它是否使用包含所有集合的变量定义隐藏字段?
这是我的GSP视图中的表单:
<g:form action="savePredicctions">
<fieldset>
<g:each in="${predictions}">
<li>
<div>
${it.match.homeTeam}
<g:field name="${it.match}.homeGoals" type="number" value="${it.homeGoals}" />
</div>
-
<div>
<g:field name="${it.match}.awayGoals" type="number" value="${it.awayGoals}" />
${it.match.awayTeam}
</div>
</li>
</g:each>
</fieldset>
<fieldset class="submit">
<g:submitButton />
</fieldset>
</g:form>
答案 0 :(得分:3)
您可以使用command对象存储预测实例。
@Validateable
class PredictionCommand {
//data binding needs a non-null attribute, so we use ListUtils.lazyList
List<Prediction> predictions = ListUtils.lazyList([], FactoryUtils.instantiateFactory(Prediction))
}
在您的视图中,您需要控制列表的索引,并将Prediction的属性发送到控制器:
<g:each in="${predictions}" status="i">
<g:textField name="predictions[$i].homeGoals" />
<g:textField name="predictions[$i].awayGoals" />
</g:each>
在您的控制器中,您可以使用bindData()
将params
绑定到您的命令:
class CommandController {
def save() {
PredictionCommand command = new PredictionCommand()
bindData(command, params)
println command.predictions
}
}