[英]Auto Binding a Grails One-To-Many Relationship
我在Grails中自動綁定一對多關系時遇到困難,而不需要在控制器中使用一些hack。 我知道Grails中的一對多關系是一個無序的集合,並以某種方式影響綁定。
當我保存此表單時,有時數據會正確保存,有時則不會。 如果作者有3-4本書,那么它似乎不那么頻繁。
在這個例子中,我試圖刪除所有不相關的代碼來說明問題。
楷模:
class Author {
String name
static hasMany = [ books:Book ]
}
class Book {
String title
static belongsTo = [ author:Author ]
}
視圖:
<g:form method="post" class="form-horizontal">
<g:hiddenField name="id" value="${authorInstance?.id}" />
<g:hiddenField name="version" value="${authorInstance?.version}" />
<g:textField name='name' value='${authorInstance?.name}'/>
<g:each var="book" in="${authorInstance.books}" status="i">
<g:hiddenField name='book[${i}].id' value='${book.id}'/>
<g:textField name='book[${i}].title' value='${book.title}'/>
</g:each>
<g:actionSubmit action="update" value="Update" />
</g:form>
控制器:
def update(Long id, Long version) {
def author = Author.get(id)
// removed "Not Found" and "Version" validation for this example
author.properties = params
if (!author.save(flush: true)) {
render(view: "edit", model: [author: author])
return
}
flash.message = "Success"
redirect(action: "list"
}
如何構建我的模型和視圖,以便我可以保持控制器相對不受影響?
我一直在努力解決提交一對多表格的類似問題。 我通過將設備轉換為包來解決它在我的應用程序中。
所以除非你特別需要books
作為一套,試試這個:
class Author {
String name
Collection<Book> books
static hasMany = [ books:Book ]
}
我發現最簡單的辦法就是強制“書籍”成為一個列表,這樣才能訂購。
class Author {
List books <------- Added (by default this one-to-many relationship is a Set)
String name
static hasMany = [ books:Book ]
}
然后視圖可以保持不變,一切都應該按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.