public class Service {
String reviewChanges
String comment
static constraints = {
reviewChanges (inList:['NO','YES'])
comment validator: { val, obj ->
if(reviewChanges=='YES') {
(nullable:false, blank:false, minSize:1, maxSize:500)
} else {
(nullable:true, blank:true, minSize:1, maxSize:500)
}
}
}
}
以上评论验证器对我不起作用。 我想如果reviewChanges字段选择YES则评论字段必须是必填字段否则评论提交非强制性
答案 0 :(得分:1)
使用自定义验证器的最佳方式就是这样..
static constraints = {
reviewChanges(inList:['NO','YES'])
comment validator: { val, obj,errors ->
if (obj.reviewChanges == 'YES' && StringUtils.isEmpty(val)) {
errors.rejectValue('comment',"some.custom.validation.key")
}
}
}
errors.rejectValue 将允许您使用propertyName提供正确的字段错误,并且您也可以将其用于参数化错误...
errors.rejectValue('propertyName','errorCode',errorArgs as Object[],'defaultMessage')
并定义errorCode是message.properties以访问errorArgs,如
errorCode = This is {0} first parameter being passed as errorArgs.
由于
答案 1 :(得分:0)
你可以做这样的事情我想(我没有测试过这个,但是你明白了):
static constraints = {
reviewChanges(inList:['NO','YES'])
comment validator: { val, obj ->
if (obj.reviewChanges == 'YES' && StringUtils.isEmpty(val)) {
return "some.custom.validation.key"
}
}
}
答案 2 :(得分:0)
除非要求将reviewChanges
作为字符串,否则我会将其设为Boolean
字段并使用Groovy事实,您应该可以执行以下操作:
class Service {
Boolean reviewChanges
String comment
static constraints = {
comment nullable:true, minSize:1, maxSize:500, validator: { val, obj ->
if (obj.reviewChanges && (!val)){
return "comments.required"
}
}
}
}
使用Grails 2.3.3