簡體   English   中英

自動綁定Grails一對多關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM