当前位置: 首页 > 知识库问答 >
问题:

将对象列表从视图发送到控制器:限制为 256 个对象

盖嘉珍
2023-03-14

我的视图中有一个向控制器发送对象的表单,但问题是,如果我发送的对象超过256个,就会出现异常:

org.springframework.beans.InvalidPropertyException: Invalid property 'followers[256]' of bean class [org.myec3.portalgen.plugins.newsletter.dto.FollowerFileDto]: Index of out of bounds in property path 'followers[256]'; nested exception is java.lang.IndexOutOfBoundsException: Index: 256, Size: 256

所以我在想为什么会有这样的限制,于是我找到了这个话题:https://stackoverflow.com/a/24699008/4173394

但它似乎对我不起作用(可能是我的一个坏习惯)。

下面是我的结构:我的视图名为createUpdate.vm,并像这样发布我的表单:

<form id="createFollowerFileForm" method="post" action="#route("followerFileController.upsertFollowerFile")" enctype="multipart/form-data" class="form_styled">

我在FollowerFileControl ler中的函数upsertFollowerFile:

    @InitBinder
    public void initBinder(WebDataBinder dataBinder) {
        // this will allow 500 size of array.
        dataBinder.setAutoGrowCollectionLimit(500);
    }

    @Secured({ "ROLE_SUPER_ADMIN_PORTALGEN", "ROLE_CUSTOMER_PORTALGEN", "ROLE_ADMIN_PORTALGEN", "ROLE_WRITER_PORTALGEN" })
    public String upsertFollowerFile(
            @ModelAttribute(value = "followerFile") FollowerFileDto followerFileDto,
            BindingResult result, ModelMap model, HttpServletRequest request) {

我的班级如下:

public class FollowerFileDto {

    private String title;

    private Long followerId;

    private boolean isDeletable;

    private List<FollowerDto> followers;

    public FollowerFileDto() {
        this.followers = new ArrayList<FollowerDto>();
    }

正如您在控制器中看到的那样,我尝试使用 @InitBinder 注释设置超过 256 个允许的对象 (500),但它根本不起作用。从不调用 InitBinder 函数。我做错了什么吗?感谢您的回答;)

共有2个答案

百里涛
2023-03-14

Spring 只允许列表中有 255 个对象

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.setAutoGrowCollectionLimit(1000);

    // SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    // dateFormat.setLenient(false);
    // binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}

令狐珂
2023-03-14

实际上,没有读取@InitBinder,这就是为什么没有设置新的收集限制的原因。我不得不将我的 springmvc 路由器版本升级到 1.2.0(这也迫使我将我的 spring 版本升级到 3.2)。

在那些升级之后,用同样的代码,它工作了;)

 类似资料:
  • 我在将对象列表从Thymeleaf保存到控制器时遇到了一个大问题。thymeleaf中的对象列表由Jquery生成。但我不知道如何将数据传输到控制器,对象列表不知道大小。因为用户可以随时添加它。请帮助我将thymeleaf中的列表对象发送给控制器。 我创建了一个具有1个属性的新类:ArrayList loaiDoans;“LoaiDoan”是我想要保存的对象。使用该类是将列表“loaidon”从t

  • 我有窗体和相应的控制器,对象列表被传递给它们。 实体类: 控制器: 形式: 我假设表单中的百里叶th:each循环变量不能是th:object=${ent2}(因为如果我这样做,select form返回null)。而th:value="${ent2.name}返回字符串值。所以我不得不将@RequestParam(th:value)发送给“save”方法。但是在这种情况下,我必须对数据库进行额外

  • 假设我有 Person,我创建了一个 实例列表,并将此列表添加到。 在< code >视图页面中,我有一个表单: 当我单击提交按钮时,我想将< code >人员列表绑定到控制器上的POST方法.. 但是< code>persons列表没有在< code>POST方法中绑定/获取。 是否可以以这种方式绑定列表对象,或者是否有替代方法?

  • 我遵循了http://viralpatel.net/blogs/spring-mvc-multi-row-submit-java-list/将对象列表发布到我的Spring Controller。很快,当列表大小达到256时,我遇到了IndexOutOfBoundsException。 我找到了一个答案,它说在WebDataBinder中设置setAuto就可以解决这个问题。所以在我的控制器中,我

  • seleccion“对象它是一个实体,具有我从Ajax发送的JSON的一些属性,”seleccionados“是一个列表,保存接收到的数组,但当我发送它时,obj参数总是返回一个空对象,Ajax发送错误函数,我认为问题是我在向对象发送数组,但我不知道如何解决它 选择对象模型:

  • JS: 豆角 错误: 对于一个简单的任务来说,这太复杂了。