我有一个课程项目:
class Item {
String title
String description
String linkText
String linkUrl
static constraints = {
title blank: false
description blank: false
linkText blank: false
linkUrl blank: false, url: true
}
当我尝试使用时保存Item的新实例
def itemInstance = new Item(params)
itemInstance.save()
我收到验证错误:
Property [linkText] of class [class Item] cannot be null
我有两个问题:
> linkText就在表格中,位于< g:textField> name =“linkText”.为什么它没有绑定到itemInstance?如果我在save()之前打印出params,我会得到它们,包括linkText,但是如果我从这些params构造它时打印出预先保存的itemInstance的属性,则实例上的linkText为null.我可以将保存代码更改为
def itemInstance = new Item(params)
itemInstance.linkText = params.linkText
它将被保存没有任何问题,并使用params.linkText.但我为什么要这样做呢? linkText现在是保留关键字还是其他什么? (我所知道的就是it wasn’t in 2008.)
>为什么我得到一个“可空”错误而不是“空白”错误?他们是不同的错误.我在messages.properties中有一个自定义消息,但即使Grails现在不想使用它,我也希望它能给我default.blank.message(类的“Property [{0}]” [{1}]不能为空“).
这个名单上的第一名对我来说是最关心的,但是我真的不明白为什么Grails在这个领域的所有其他三个字符串的处理方式与这个领域完全不同.
最佳答案 正如评论中所提到的,我在一个新项目中试过这个并且无法重现这个问题.
对于#1:我会尝试几种不同的东西:
>包含所有键/值对的新映射(不是params的克隆),并尝试使用此自定义映射实例化我的Item.只是为了确认是否是导致意外行为的域/约束或参数映射.
> params的克隆然后用它来实例化.
如果它在两种情况下都能正常工作,那么我会仔细查看我的实际参数图并将其与工作克隆进行比较.