我有一个Item
类:
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"
中。为什么不将它绑定(bind)到itemInstance
?如果我在save()
之前打印出这些参数,那么我会得到所有信息,包括linkText
,但是如果我从这些参数构造出预先保存的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}] of class [{1}] cannot be blank
”)。 该列表上的第一名是我最关心的问题,但我真的不明白为什么Grails将此字段与该类中所有其他三个
Strings
区别对待。 最佳答案
如评论中所述,我在一个新项目中尝试了此操作,无法重现该问题。
对于#1:我会尝试几种不同的方法:
如果在两种情况下都能正常工作,那么我将仔细查看我的实际参数图,并将其与正常工作的克隆进行比较。