【问题标题】:Vaadin Lazy Loading Grid Error : java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0Vaadin 延迟加载网格错误:java.lang.IndexOutOfBoundsException:索引 0 超出长度 0 的范围
【发布时间】:2021-07-05 03:37:54
【问题描述】:

我正在尝试在 vaadin 网格上进行延迟加载,但出现错误 java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0 这是我的 UI 代码:

// Grid Account
Grid<AccountModel> accountData = new Grid<>(AccountModel.class);
CallbackDataProvider<AccountModel, Void> accountDataProvider = DataProvider
        .fromCallbacks(
                query -> {
                    System.out.println("Offset :");
                    System.out.println(query.getOffset());
                    System.out.println("Limit :");
                    System.out.println(query.getLimit());
                    System.out.println("End Offset, Limit");
                    return accountServices.getAccountTableWithParam(query.getOffset(), query.getLimit()).stream();
                },
                query -> {
                    System.out.println("Count :");
                    int count = 0;
                    try {
                        count = accountServices.getAccountTableCount();
                    } catch (EndpointException ex) {
                        Logger.getLogger(AccountServices.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    System.out.println(count);
                    System.out.println("END BRO");
                    return count;
                });

accountData.setDataProvider(accountDataProvider);
accountData.setColumns("accountId", "name", "balance", "allowNegativeBalance");       
add(accountData);

这是我的服务代码:

public List<AccountModel> getAccountTableWithParam(Integer limit, Integer offset) {
    List<AccountModel> datalog = null;
    try {
        datalog = new JsonResponseReader(restMockvaEndpoint.send(new EndpointRequestBuilder()
                .method("GET")
                .resource("/account")
                .property("offset", offset)
                .property("limit", limit)
                .build())).getContentTable(AccountModel.class).getData();
    } catch (EndpointException ex) {
        Logger.getLogger(AccountServices.class.getName()).log(Level.SEVERE, null, ex);
    }
    return datalog;
}

public int getAccountTableCount() throws EndpointException {
    int datalog = new JsonResponseReader(restMockvaEndpoint.send(new EndpointRequestBuilder()
                .method("GET")
                .resource("/account")
                .build()
        )).getContentTable(AccountModel.class).getData().size();
    return datalog;
}

这是 Wildfly 日志:

15:45:05,977 INFO  [org.eclipse.jetty.util.log] (default task-2) Logging initialized @964386ms to org.eclipse.jetty.util.log.Slf4jLog
15:45:06,157 INFO  [stdout] (default task-2) Count :
15:45:06,284 INFO  [stdout] (default task-2) 2
15:45:06,284 INFO  [stdout] (default task-2) END BRO
15:45:06,284 INFO  [stdout] (default task-2) Offset :
15:45:06,284 INFO  [stdout] (default task-2) 0
15:45:06,284 INFO  [stdout] (default task-2) Limit :
15:45:06,285 INFO  [stdout] (default task-2) 2
15:45:06,285 INFO  [stdout] (default task-2) End Offset, Limit
15:45:06,292 INFO  [stdout] (default task-2) Count :
15:45:06,300 INFO  [stdout] (default task-2) 2
15:45:06,300 INFO  [stdout] (default task-2) END BRO
15:45:06,303 ERROR [com.vaadin.flow.server.DefaultErrorHandler] (default task-2) : java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
    at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
    at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
    at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
    at java.base/java.util.Objects.checkIndex(Objects.java:372)
    at java.base/java.util.ArrayList.get(ArrayList.java:459)
    at deployment.TES-PROJECT-1.war//com.vaadin.flow.data.provider.DataCommunicator.lambda$getJsonItems$3(DataCommunicator.java:615)
    at java.base/java.util.stream.IntPipeline$1$1.accept(IntPipeline.java:180)
    at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Streams.java:104)
    at java.base/java.util.Spliterator$OfInt.forEachRemaining(Spliterator.java:699)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)

有什么想法吗?谢谢

【问题讨论】:

  • 可能是因为你的limit和offset顺序不对。您使用getAccountTableWithParam(query.getOffset(), query.getLimit()) 调用该方法,但该方法定义为getAccountTableWithParam(Integer limit, Integer offset)
  • 谢谢!你说的对!我错了xD

标签: jakarta-ee java-8 vaadin java-ee-8 vaadin-grid


【解决方案1】:

请检查计数变量并确保计数不影响偏移和限制

【讨论】:

  • 谢谢!你说得对。我在计数变量上犯了错误。
猜你喜欢
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
  • 2016-12-16
相关资源
最近更新 更多