Привязка данных не работает, если индекс больше 255

Я работаю над приложением, используя grails version 2.3.9, Там я делаю список с флажком. Пользователь может выбрать любую строку (и) и отправить страницу. И на стороне сервера я использую объект команды для привязки данных.

Мой командный объект--

@Validateable
class MyCO {

    List<MyDoamin> myDomains = ListUtils.lazyList([], FactoryUtils.instantiateFactory(MyDoamin))
    ...

    static constraints = {
        myDomains nullable: false, validator: { val, obj ->
            if (val.size() < 1) {
                return "error.code"
            }
        }
        ...
    }
}

Посмотреть--

<g:each in="${myDomains}" var="myDomain" status="idx">
  <tr>
    <td>
      <input type="checkbox" name="myDomains[${idx}].id" value="${myDomain.id}" checked>
    </td>
    ...
  </tr>
</g:each>

Action--

def myAction(MyCO myCO) {
    if (myCO.validate()) {
        ...
    } else {
        log.error "-----INVALID-----"
        ...
    }
}

Этот код работает нормально. Но если пользователь выбирает строки, значения индекса (idx) которых превышают 255, привязка данных не работает.

Запросить параметры--

[myDomains [256].id: 66, myDomains [256]: [id: 66], действие:myAction, контроллер:myController]

Я тоже пробовал с

List<MyDoamin> myDomains

а также

List<MyDoamin> myDomains = [].withDefault { new Client() }

в объекте команды, но тот же результат, без привязки данных.

Я что-то здесь не так делаю? Как я могу это исправить?

1 ответ

Решение

По умолчанию предел автоматического роста коллекции установлен на 255:

https://github.com/grails/grails-core/blob/2.3.x/grails-plugin-databinding/src/main/groovy/org/codehaus/groovy/grails/plugins/databinding/DataBindingGrailsPlugin.groovy

Вы можете изменить это, установив grails.databinding.autoGrowCollectionLimit в Config.groovy к чему-то еще.

Причина этого ограничения заключается в том, что злоумышленник может создать атаку типа "отказ в обслуживании", которая исчерпала всю память, создав тысячи объектов во время привязки данных, а это не то, что вам нужно.

Другие вопросы по тегам