フィルタリングされたデータをバックエンドから遅延ロードしたい。バックエンドから1つの要素を返すフィルターを適用する(またはフィルターを適用しない)と、すべてが正常に機能します。
OutOfBoundsException
取得したアイテムが1を超えると、クラッシュまたはスローし始めます。実装のガイドラインとして、公式のVaadinドキュメントを使用しました。
例外はでスローされます。filter()
Stream-APIのメソッド。例外の意味も認識しています。値にアクセスしようとするインデックスは、リストの最大サイズ以上ですが、これを修正する方法がわかりません。最初のクエリの制限をlimit-1に設定しても、修正されませんでした。
コールバックの2番目のクエリで問題が発生していると思いますが、問題が何なのかわかりません。Stream-APIの問題ですか、それとも2番目のコールバッククエリが正しく機能していませんか?
public DataProvider<T, String> createLazyLoadingProvider(List<T> data) {
DataProvider<T, String> lazyLoadingProvider
= DataProvider.fromFilteringCallbacks(query -> {
// First Query
final int offset = query.getOffset();
final int limit = query.getLimit();
final String filter = query.getFilter().orElse("");
return data
.stream()
.skip(offset)
.limit(limit)
.filter(e -> {
return e.toString().startsWith(filter);
});
}, query -> {
// Second query
return (int) data.stream()
.filter(e -> {
return e.toString().startsWith(filter);
})
.count();
});
return lazyLoadingProvider;
}
生成する:
First Query
Offset: 0
Limit: 100
Callback-Filter: 3
Full Size of Data: 6005
From backend fetched Items: 5
-----------
Second Query
Offset: 0
Limit: 2147483647
Callback-Filter: 3
Max fetchable Items with filter applied: 381
スタックトレース:
java.lang.IndexOutOfBoundsException:インデックス5の長さ5の範囲外。java.base/ jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)at java.base / jdk.internal.util.Preconditions.outOfBoundsCheckIndex( Preconditions.java:70)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:458)at com.vaadin.flow.data.provider.DataCommunicator.lambda $ getJsonItems $ 3(DataCommunicator.java:611)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)java.base / java.util.stream.AbstractPipeline.copyInto(AbstractPipeline。java:484)java.base / java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)at java.base / java.util.stream.ReduceOps $ ReduceOp.evaluateSequential(ReduceOps.java:913)at java .base / java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)at java.base / java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)at com.vaadin.flow.data.provider .DataCommunicator.getJsonItems(DataCommunicator.java:613)at com.vaadin.flow.data.provider.DataCommunicator.collectChangesToSend(DataCommunicator.java:556)at com.vaadin.flow.data.provider.DataCommunicator.flush(DataCommunicator.java :473)com.vaadin.flow.data.provider.DataCommunicator.lambda $ requestFlush $ 2f364bb9 $ 1(DataCommunicator.java:421)at com.vaadin.flow.internal.StateTree.lambda $ runExecutionsBeforeClientResponse $ 1(StateTree.java:364 )java.base / java.util。ArrayList.forEach(ArrayList.java:1540)at com.vaadin.flow.internal.StateTree.runExecutionsBeforeClientResponse(StateTree.java:361)at com.vaadin.flow.server.communication.UidlWriter.encodeChanges(UidlWriter.java:392) com.vaadin.flow.serverのcom.vaadin.flow.server.communication.UidlRequestHandler.writeUidl(UidlRequestHandler.java:116)のcom.vaadin.flow.server.communication.UidlWriter.createUidl(UidlWriter.java:182)で.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:89)at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1540 )com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:246)at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)at org.eclipse.jetty.servlet。org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1617)のorg.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:のServletHolder.handle(ServletHolder.java:760) 226)org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1604)at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:545)at org.eclipse.jetty.server .handler.ScopedHandler.handle(ScopedHandler.java:143)(org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:536)at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java) :127)org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1592)at org.eclipse。 jetty.server.handler。ScopedHandler.nextHandle(ScopedHandler.java:233)at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1296)at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java: 188)org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485)at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1562)at org.eclipse.jetty.server .handler.ScopedHandler.nextScope(ScopedHandler.java:186)at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1211)at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler .java:141)org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:221)at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)at org。 eclipse.jetty.server.handler。gzip.GzipHandler.handle(GzipHandler.java:717)(org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)(org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper。 java:127)org.eclipse.jetty.server.Server.handle(Server.java:500)at org.eclipse.jetty.server.HttpChannel.lambda $ handle $ 1(HttpChannel.java:386)at org.eclipse。 jetty.server.HttpChannel.dispatch(HttpChannel.java:562)at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:378)at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java: 270)org.eclipse.jetty.io.AbstractConnection $ ReadCallback.succeeded(AbstractConnection.java:311)at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)at org.eclipse.jetty.io org.eclipse.jetty.ioの.ssl.SslConnection $ DecryptedEndPoint.onFillable(SslConnection.java:543)。ssl.SslConnection.onFillable(SslConnection.java:398)at org.eclipse.jetty.io.ssl.SslConnection $ 2.succeeded(SslConnection.java:161)at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java :103)org.eclipse.jetty.io.ChannelEndPoint $ 2.run(ChannelEndPoint.java:117)at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)at org.eclipse org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)org.eclipse.jetty.utilの.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) org.eclipse.jetty.util.thread.ReservedThreadExecutor $ ReservedThreadExecutor.java:388)のorg.eclipse.jetty.util.thread.QueuedThreadPoolの.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) org.eclipse.jetty.util.threadの.runJob(QueuedThreadPool.java:806)。QueuedThreadPool $ Runner.run(QueuedThreadPool.java:938)at java.base / java.lang.Thread.run(Thread.java:834)
オフセットと制限を適用する前にフィルタリングする必要があります。
詳細:
アイテムがApple, Cucumber, Lemon, Lettuce, Linseed, Lime, Tangerine, Tomato
あり、フィルターにで始まるアイテムのみを含めるとしL
ます。
カウントクエリは、カウント4(Lemon, Lettuce, Linseed, Lime
)を返します。
ここで、グリッドには最初の2つのアイテムが必要なので、オフセット0と制限2を送信します。
コードで行うことは、最初の2つの項目を選択し、Apple, Cucumber
それらをフィルター処理して、0項目を返すことです。
それがする必要があるのは、取得するアイテムをフィルタリングし、Lemon, Lettuce, Linseed, Lime
オフセット0と制限2を取得することLemon, Lettuce
です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加