我很难将hasErrors用于索引属性。例如
class Order {
String prop1
String prop2
static hasMany = [items: Item]
}
class Item {
String name
static constraints = {
name(blank:false)
}
}
验证工作正常且item.name为空白我确实收到错误
<g:renderErrors bean="${orderInstance}"/>
但是,我正在尝试使用hasErrors突出显示输入框:
<g:each in="${orderIntsance.items}" status="i" var="item">
<span class="field ${hasErrors(bean: orderInstance, field: ????????? , 'errors')}">
<g:textField name="items[${i}].name" value="${item?.name}"/>
</span>
</g:each>
不确定如何使用字段:属性,任何想法?
由于
答案 0 :(得分:1)
找到它,根据Grails Validation文档页面(duh)实现自定义验证器:
“在某些情况下(异常情况),您可能需要知道如何将错误从嵌套子对象传输到父域对象。在某些情况下,如果您在父对象之前验证子对象,那么在将对象发送到JSP之前,子对象上的错误将被重置。“ (http://www.grails.org/Validation)
static constraints = {
children( nullable:true, validator: {val, obj, errors ->
def errorFound = false;
val.each{ child ->
if(!child .validate()){
errorFound = true;
child .errors.allErrors.each{ error->
obj.errors.rejectValue('children', "parent.child.invalid",
[child, error.getField(), error.getRejectedValue()] as Object[],
"For source [${child}],
field [${error.getField()}] with value [${error.getRejectedValue()}] is invalid.")
}
}
}
if(errorFound) return false;
})
}
答案 1 :(得分:0)
我有类似的要求,并尝试以下方式,它的工作原理。只是想分享它
${hasErrors(bean: orderInstance, field: 'items['+ i +'].name', 'errors')