我想确保检查表示布尔值的两个表单字段之一。但是没有适当的限制来做到这一点。 nullable: false
不起作用。
class Organisation {
Boolean selfInspecting
static constraints = {
selfInspecting(nullable: false)
}
}
如何检查是否选中了其中一个字段?
答案 0 :(得分:3)
也许最简单的方法是使用确保选择值的表单。因此,创建单选按钮而不是复选框是更好的解决方案。它也会直接代表你的意图。
答案 1 :(得分:2)
您也可以在控制器中进行检查,例如
if (params.checkBox1 != 'on' && params.checkBox2 != 'on')
flash.error = 'At least one value must be checked.'
return ...
答案 2 :(得分:1)
您可以编写自己的自定义验证器。
类似
selfInspecting(validator: {val, obj -> /*test selfInspecting here*/})
编辑 - 响应其他答案 - 您可以在表单上处理此问题,但您也应该在服务器上处理它。
另一个编辑 - 评论中建议您可能要验证Domain类中的两个字段之一。使用自定义验证器也可轻松完成此操作。使用上面的自定义验证器闭包签名,val是值selfInspecting,obj是域对象实例。你可以拥有
{ val, obj ->
if (val == null) return false // if you want to ensure selfInspecting is not null
else return true
... or ...
// if you want to check that at least 1 of two fields is not null
def oneOrTheOther = false
if (obj.field1 != null || obj.field2 != null)
oneOrTheOther = true
return oneOrTheOther
}