Spring AutoPopulatingList最大大小?

时间:2014-01-06 09:16:35

标签: java spring spring-mvc

我遇到了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

您知道是否有实际限制吗?如果是,有没有办法提高它? 如果没有,你能想到解决这个问题的方法吗?

提前感谢您的帮助

3 个答案:

答案 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接口可能是有序的吗?