如果索引大于 255,则数据绑定不起作用
Data binding not working if index is greater than 255
我正在使用 grails version 2.3.9
开发应用程序。我在那里呈现一个带有复选框的列表。用户可以 select 任何行并提交页面。在服务器端,我使用命令对象来绑定数据。
我的命令对象--
@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>
行动--
def myAction(MyCO myCO) {
if (myCO.validate()) {
...
} else {
log.error "-----INVALID-----"
...
}
}
此代码运行良好。但是,如果用户 select 行的索引 (idx) 值大于 255,则数据绑定不起作用。
请求参数--
[myDomains[256].id:66, myDomains[256]:[id:66], action:myAction,
controller:myController]
我也试过
List<MyDoamin> myDomains
和
List<MyDoamin> myDomains = [].withDefault { new Client() }
在命令对象中,但结果相同,没有数据绑定。
我是不是做错了什么?我该如何解决这个问题?
默认情况下,集合自动增长限制设置为 255:
您可以通过将 Config.groovy
中的 grails.databinding.autoGrowCollectionLimit
设置为其他内容来更改此设置。
此限制的原因是攻击者可以设计拒绝服务攻击,通过在数据绑定期间创建数千个对象来耗尽所有内存,这不是您想要的。
我正在使用 grails version 2.3.9
开发应用程序。我在那里呈现一个带有复选框的列表。用户可以 select 任何行并提交页面。在服务器端,我使用命令对象来绑定数据。
我的命令对象--
@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>
行动--
def myAction(MyCO myCO) {
if (myCO.validate()) {
...
} else {
log.error "-----INVALID-----"
...
}
}
此代码运行良好。但是,如果用户 select 行的索引 (idx) 值大于 255,则数据绑定不起作用。
请求参数--
[myDomains[256].id:66, myDomains[256]:[id:66], action:myAction, controller:myController]
我也试过
List<MyDoamin> myDomains
和
List<MyDoamin> myDomains = [].withDefault { new Client() }
在命令对象中,但结果相同,没有数据绑定。
我是不是做错了什么?我该如何解决这个问题?
默认情况下,集合自动增长限制设置为 255:
您可以通过将 Config.groovy
中的 grails.databinding.autoGrowCollectionLimit
设置为其他内容来更改此设置。
此限制的原因是攻击者可以设计拒绝服务攻击,通过在数据绑定期间创建数千个对象来耗尽所有内存,这不是您想要的。