2013-04-23 25 views
1

我以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> 

回答

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)) 

} 

在你看來,你需要控制列表的索引,併發送預測的屬性控制器:

<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 
    } 
} 
+0

感謝您的幫助,我將詳細瞭解命令並嘗試此解決方案 – maureyes 2013-04-23 12:32:39

相關問題