我尝试从两个不同的objekts验证两个语言字段。我找到Grails Validation,所以我创建了:
class Test {
Title title
Summary summary
static contraints ={
title validator: { val, obj ->
if (obj.title.getLanguage().equals(obj.summary.getLanguage())) println "same language"
}
}
}
域名摘要
class Summary{
String language }
和域名
class Title{
String language}
但在我看来验证器没有反应。提前谢谢。
答案 0 :(得分:0)
如果没有看到您网域的其余部分,我无法确定具体细节,但却遗漏了一些重要内容。您缺少对要验证的实例的引用。使用自定义验证时,有两个可选参数传递到验证闭包中。一个是要验证的类的实例,另一个是当前属性的值。所以,给定一个这样的域:
class MyPerson {
String name
String nickName
static constraints = {
name(nullable: false, blank: false)
nickName(validator: {val, obj ->
if (obj.name == val) return false // ensure the name and nickname do not equal one another
return true
})
}
}
因此,在上面的示例中,自定义验证可确保名称和昵称彼此不匹配。请注意使用obj.name
来引用实例的另一个属性。这是你试图做的事情的关键。
在您的情况下,您的验证可能如下所示:
static contraints ={
title validator: { val, obj ->
if (obj.title.getLanguage().equals(obj.summary.getLanguage())) println "same language"
}
}
希望这有帮助。
答案 1 :(得分:0)
试试此代码
static constraints = {
title blank: false, nullable: false,validator:{ value , object ->
//get title object from database,based on your logic/requirement
def title = Title
// get summary object from database,based on your logic/requirement
def summary = Summary
if (title.getLanguage().equals(summary.getLanguage()))
println "same language"
return true
} else {
//show message for validation failed.
return ['not.unique.validation','Langauge']
}
}
}