具有索引属性的hasErrors

时间:2010-04-12 21:35:12

标签: grails groovy

我很难将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>

不确定如何使用字段:属性,任何想法?

由于

2 个答案:

答案 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')