Привязка данных не работает, если индекс больше 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:
Вы можете изменить это, установив grails.databinding.autoGrowCollectionLimit
в Config.groovy
к чему-то еще.
Причина этого ограничения заключается в том, что злоумышленник может создать атаку типа "отказ в обслуживании", которая исчерпала всю память, создав тысячи объектов во время привязки данных, а это не то, что вам нужно.