gpt4 book ai didi

Grails 2.4.4 升级数据绑定(bind)问题

转载 作者:行者123 更新时间:2023-12-01 23:48:19 24 4
gpt4 key购买 nike

我们在此处用于大型动态表单的模式是允许客户端编辑几乎整个图表,包括子项和子项的删除和添加是在 javascript 中处理的。失败的用例是当用户删除其中一个 child 的属性时,对于这个例子,我们假设第二个 child 的电子邮件地址被删除并且参数被发送为空。

示例类结构

域 X

  Long id
String name
SortedSet<Child> children

域子

  Long id
Integer position // used to sort
String name (required)
String email (required)

参数以这种方式命名:

 x.id = 1
x.name = 'blah'
x.children[0].id = 1
x.children[0].position = 0
x.children[0].name = 'childa0'
x.children[0].email = 'child0@any.com'
x.children[1].id = 2
x.children[1].position = 1
x.children[1].name = 'child1'
x.children[1].email = ''

当前存储值:

 x.id = 1
x.name = 'blah'
x.children[0].id = 1
x.children[0].position = 0
x.children[0].name = 'childa0'
x.children[0].email = 'child0@any.com'
x.children[1].id = 2
x.children[1].position = 1
x.children[1].name = 'child1'
x.children[1].email = 'child1@any.com'

要更新的模式是:

浏览器

  • 用户编辑所有内容并提交更改
  • parms 如上所示发送,在此用例中,用户意外删除了所需的电子邮件地址(是的,在这种简单情况下可以阻止提交,但有更广泛的验证规则,这只是一个说明问题的简单示例)

服务器

  • 使用 id parm 检索当前父域类
  • 检查当前存储的版本与编辑过的版本并确保它没有改变
  • 以这种方式将所有参数应用于当前域对象:x.properties = parms.x

这就是它崩溃的地方。在 Grails 2.2.2 中,child[1] 的 email 属性被更新为空字符串,运行验证会捕获错误。 Grails 2.4.4 不更新子值。我知道数据绑定(bind)发生了变化,也许这种变化有正当理由,但我无法理解。这从 1.3.6 到 2.2.2 有效。

需要注意的一件事是,如果我没有检索域类而是使用传入的参数创建一个新实例,则所有子参数都设置正确。

X x = new X(params.x) 

这似乎表明一些 Grails 问题,因为用户指南将这两种方法视为平等的 - 一种用于新实例,另一种用于更新,但这些示例清楚地表明这两种方法都应处理索引子属性。

感谢任何帮助或想法!

最佳答案

我在将应用程序从 2.2.4 升级到 2.4.4 时遇到了这个问题。

config.groovy 设置 grails.databinding.useSpringBinder = true

并将 grails-web-databinding-spring 添加到 pom 对我来说非常完美。

显然这样做比重写所有绑定(bind)代码要简单得多:-)

关于Grails 2.4.4 升级数据绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27971301/

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