我遇到了Spring AutoPopulatingList的问题。我的用例如下:管理可以访问应用程序的用户列表。
在GUI端,我使用自动填充字段来搜索并将用户添加到右侧的表中。用户也可以从表中删除。 当GUI用户提交时,GUI动态地为用户构建一个包含字段的表单:selectedUsers [1],...,selectedUsers [N]。
我的问题是我的“支持”bean中的AutoPopulatingList似乎只增长到256个项目,然后停止。所以我收到以下错误:
[myapp.web.controller.admin.form.ApplicationForm]:属性路径'selectedUsers [256]'中的列表索引无效;嵌套异常是java.lang.IndexOutOfBoundsException:索引:256,大小:256
您知道是否有实际限制吗?如果是,有没有办法提高它? 如果没有,你能想到解决这个问题的方法吗?
提前感谢您的帮助
答案 0 :(得分:18)
好的,所以我在Spring的内部挖掘了一些,发现默认情况下,256是限制。
限制由BeanWrapperImpl#autoGrowCollectionLimit属性给出。 Spring的WebDataBinder默认配置将其设置为256。
提高此限制的正确方法是在控制器中定义@InitBinder注释方法:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setAutoGrowCollectionLimit(1024);
}
然后一切都按预期工作。
我没有尝试找到一种全局修改此限制的方法。
HTH
答案 1 :(得分:3)
在Java中,List
是0索引的。如果列表包含256个元素,则第一个索引为selectedUsers[0]
,最后一个索引为selectedUsers[255]
。
您似乎正在尝试访问selectedUsers[256]
(第257个元素),而列表中只包含256个元素。
答案 2 :(得分:0)
经过一些阅读后,看起来有一个“LazyList”界面,您可以使用“getBlocks()”方法告诉Spring“嘿,这个列表可以扩展”。
在此处查看完整示例: http://mattfleming.com/node/134
我似乎无法让它在我自己的项目中工作。我认为某种@Bean接口可能是有序的吗?