hasErrors с индексированным свойством - PullRequest
1 голос
/ 13 апреля 2010

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

1 голос
/ 13 апреля 2010

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

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

${hasErrors(bean: orderInstance, field: 'items['+ i +'].name', 'errors')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...