我有一个命令对象,它捕获一个带3个textareas的反馈表单。在grails域对象中验证一组字段
class FeedbackCommand {
String textarea1
String textarea2
String textarea3
String username
static constraints = {
textarea1(nullable:true, blank:true)
textarea2(nullable:true, blank:true)
textarea3(nullable:true, blank:true)
username(nullable:false, blank:false)
}
}
我想确保至少有一个textareas被填写。
我想出了一个假的标志字段作为'约束'字段,然后在该字段的自定义验证器中做一堆对象检查。如果在我自己周围寻找并且我没有找到我想要的东西,我会抛出一个错误。
现在,我这样做:
class FeedbackCommand {
String textarea1
String textarea2
String textarea3
boolean atLeastOne = true
String username
static constraints = {
textarea1(nullable:true, blank:true)
textarea2(nullable:true, blank:true)
textarea3(nullable:true, blank:true)
atLeastOne(validator: { boolean b, FeedbackCommand form, Errors err ->
if (b) {
if ((form.textarea1==null || form.textarea1?.isAllWhitespace()) &&
(form.textarea2==null || form.textarea2?.isAllWhitespace()) &&
(form.textarea3==null || form.textarea3?.isAllWhitespace()))
{
// They havent provided ANY feedback. Throw an error
err.rejectValue("atLeastOne", "no.feedback")
return false
}
}
return true
})
username(nullable:false, blank:false)
}
}
是否有
- 一种更好的方式验证相关/组字段(至少一个不能为空,2应该有价值等)?
- 一种更为方便的方式来表达“至少一个不应该是空/空白”而不是我的总的if语句块?
由于
谢谢,该插件似乎像它解决了我一直在摔跤的事情,因为我使用webflow和cmdObjects。 – Tak 2011-06-19 22:38:57
我们最初开发了这个插件来解决我们在验证大型和长期webflow中的命令对象时遇到的一些问题。 – Ruben 2011-06-20 07:44:39