本文介绍了grails 2.3一对多数据绑定与动态形式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 Grails 2.3.11 。我有一个保存一对多动态表单的问题。

I'm Using Grails 2.3.11. I have an issue in saving one-to-many dynamic forms.

我提到这个问题

我是作为一个新的问题,因为我不能添加评论上述提及的帖子。所以不要把它标记为重复。

I'm posting as a new question since I could not add comment to the above referred post. So don't mark it as duplicate.

我根据这个博客创建了动态表单

I created dynamic form based on this blog http://omarello.com/2010/08/grails-one-to-many-dynamic-forms/

在以前的应用程序中,使用 Grails 2.2.3

The same worked for me in my previous application which using Grails 2.2.3

域名类别

联系人类

package blog.omarello

import org.apache.commons.collections.FactoryUtils
import org.apache.commons.collections.list.LazyList

class Contact {

    static constraints = {
        firstName(blank:false)
        lastName(blank:false)
    }
    String firstName
    String lastName
    String nickName
    List phones = new ArrayList()
    static hasMany = [ phones:Phone ]

    static mapping = {
        phones cascade:"all-delete-orphan"
    }
}

电话类

Phone Class

package blog.omarello

class Phone {
    int index
    String number
    PhoneType type
    boolean deleted
    static transients = [ 'deleted' ]
    static belongsTo = [ contact:Contact ]

    /* Constraints & Enum */

}

控制器动作:

@Transactional
def save(Contact contactInstance) {
    println 'params: -> '+params
    println '------------------------------------------------------------'
    println 'params.phones: -> '+params?.phones
    println '------------------------------------------------------------'
    println 'params.firstName: -> '+params?.firstName
    println '------------------------------------------------------------'
    println 'params.lastName: -> '+params?.lastName
    println '------------------------------------------------------------'
    println 'params.nickName: -> '+params?.nickName

    if (!contactInstance.save(flush: true)) {
        flash.error = message(code: 'default.not.created.message', args: [message(code: 'contact.label', default: 'Contact')])
        render(view: "create", model: [contactInstance: contactInstance])
        return
    }

    request.withFormat {
        form multipartForm {
            flash.message = message(code: 'default.created.message', args: [message(code: 'contact.label', default: 'Contact'), contactInstance.id])
            redirect contactInstance
        }
        '*' { respond contactInstance, [status: CREATED] }
    }
}

当我提交表单时,我没有在控制台中收到任何错误。
输入表单字段名称为手机[0] .number,手机[1] .number, ...

When i submit the form, I didnt get any error in console.Input form fields name are phones[0].number, phones[ 1].number, ...

控制台:

params: -> [lastName:Developer, phones[0].number:123456789, phones[0]:[id:, deleted:false, new:true, number:123456789, type:H], phones[1].number:987654321, phones[1]:[id:, deleted:false, new:true, number:987654321, type:H], phones[1].deleted:false, create:Create, phones[0].id:, phones[0].deleted:false, phones[1].id:, phones[1].type:H, nickName:admin, phones[0].type:H, phones[0].new:true, firstName:Grails, phones[1].new:true, action:save, format:null, controller:contact]
------------------------------------------------------------
params.phones: -> null
------------------------------------------------------------
params.firstName: -> Grails
------------------------------------------------------------
params.lastName: -> Developer
------------------------------------------------------------
params.nickName: -> admin

我不知道为什么 params.phone Grails 2.3.11
有人帮我解决这个问题。
提前感谢

I'm not sure why params.phone shows null in Grails 2.3.11Someone help me to fix this issue.Thanks in advance.

推荐答案

数据绑定似乎有问题。如果是新手机,尝试删除params中的 id:。测试与grails 2.3.7并使用它在我的项目。

It's seem have a problem with data-binding. Try to remove id: in params if it's a new phone. Tested with grails 2.3.7 and using it in my project.

这是我在 _phone.gsp

    <div id="phone${i}" class="phone-div" <g:if test="${hidden}">style="display:none;"</g:if>>
        <g:if test="${phone?.id != null}">
            <g:hiddenField name='phones[${i}].id' value='${phone?.id}'/>
        </g:if>
        ...
    </div>

这篇关于grails 2.3一对多数据绑定与动态形式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-23 16:30