gpt4 book ai didi

grails 2.3 具有动态表单的一对多数据绑定(bind)

转载 作者:行者123 更新时间:2023-12-02 14:23:47 25 4
gpt4 key购买 nike

我正在使用 Grails 2.3.11 。我在保存一对多动态表单时遇到问题。

我提到了这个问题Grails one-to-many databinding with dynamic forms

我将作为一个新问题发布,因为我无法对上述帖子添加评论。所以不要将其标记为重复。

我基于这个博客 http://omarello.com/2010/08/grails-one-to-many-dynamic-forms/ 创建了动态表单

在我之前使用 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"
}
}

电话类
package blog.omarello

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

/* Constraints & Enum */

}

Controller 操作:
@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] }
}
}

当我提交表单时,我在控制台中没有收到任何错误。
输入表单字段名称为 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 中显示为空
有人帮我解决这个问题。
提前致谢。

最佳答案

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

这是我在 _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 具有动态表单的一对多数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25725915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com