我有一个限制,所以只能
ConfigurationHolder.config.support.reminder.web.person.max存储对象.我没有找到如何添加与特定属性无关的验证器.所以现在我以这种方式实现它.你们有什么想法让它变得更好吗?
package support.reminder.web
import org.codehaus.groovy.grails.commons.ConfigurationHolder;
class Person {
String firstName
String lastName
String email
Date lastDutyDate
static constraints = {
firstName(blank: false)
lastName(blank: false)
email(blank: false, email: true)
lastDutyDate(nullable: true)
id validator: {val ->
if (val)
Person.count() <= ConfigurationHolder.config.support.reminder.web.person.max
else
Person.count() < ConfigurationHolder.config.support.reminder.web.person.max
}
}
String toString() {
"[$firstName $lastName, $email, $lastDutyDate]"
}
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种通过约束验证Grails中的IP地址的方法.
这样的事情可能吗?
package example
class Ip {
String ip
static constraints = {
ip(unique: true, inetAddress: true)
}
}
Run Code Online (Sandbox Code Playgroud)
我找到了这个链接:http://grails.org/doc/2.2.x/api/org/codehaus/groovy/grails/validation/routines/InetAddressValidator.html,但我不知道如何实现这个.
我正在学习Grails的Grails - 由Jason Rudolph的书开始.我的域类看起来像这样:
class Race {
String name;
Date startDateTime
String city
String state
Float distance
Float cost
Integer maxRunners = 10000
static hasMany = [registrations: Registration]
static constraints = {
name(maxSize: 50, blank: false)
startDateTime(validator: {
return it > new Date()
})
city(maxSize: 30, blank: false)
state(inList: ['GA', 'NC', 'SC', 'VA'], blank: false)
distance(min: 3.1f, max: 100f)
cost(min: 0f, max: 999.99f)
}
String toString() { "${this.name} : ${this.city}, ${this.state}" }
}
Run Code Online (Sandbox Code Playgroud)
我想测试startDateTime字段的自定义验证.测试看起来像这样:
class RaceTests extends GrailsUnitTestCase {
protected …Run Code Online (Sandbox Code Playgroud) 我在服务类中有一个创建对象的方法:
def createContent (fileName, description) {
def content = new Content(
fileName:fileName,
description:description,
).save()
}
Run Code Online (Sandbox Code Playgroud)
这些属性都不可为空.如何将验证错误传回显示?我尝试过flash.message和render,两者都不能在服务类中使用.我也尝试过.save(failOnError:true),它显示了很长的错误列表.