如何解决Vaadin 延迟加载网格错误:java.lang.IndexOutOfBoundsException:索引 0 超出长度 0 的范围
我正在尝试在 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,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;
}
这里是野蝇日志:
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)
有什么想法吗?谢谢
解决方法
请检查计数变量并确保计数不受偏移和限制的影响
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。