hasErrors с индексированным свойством

Мне трудно заставить 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 ответа

Решение

Нашел его, получил возможность реализовать собственный валидатор на странице документации 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;
  })
}

У меня было подобное требование, и я попробовал следующий способ, и это сработало. Просто хотел поделиться этим

${hasErrors(bean: orderInstance, field: 'items['+ i +'].name', 'errors')
Другие вопросы по тегам