我已经在Vaadin 8中实现了网格实现的延迟加载。
我的后端运行在AWS Lambda上,响应对象的限制为6 MB。
延迟加载实现给服务器提供了默认限制(40),这使我的程序崩溃,错误为“body太大”。
我想在Vaadin中更改延迟加载的默认限制。
以下是我的代码段:
grid.setDataProvider((sortorder, offset, limit) -> {
try {
return billingClient.getInvoiceListByCriteria(criteria, (long) offset, (long) limit).stream();
} catch (Exception e) {
logger.error("Exception while getInvoiceListByCriteria", e);
return null;
}
}, () -> {
try {
totalInvoices = billingClient.getCountInvoiceListByCriteria(criteria).longValue();
Integer count = totalInvoices.intValue();
if (count == 0)
Notification.show("No Invoices found.", Notification.Type.HUMANIZED_MESSAGE);
return count;
} catch (Exception e) {
logger.error("Error occured while getting count calling getCountInvoiceListByCriteria", e);
Notification.show("Error while getting count", Notification.Type.ERROR_MESSAGE);
return null;
}
});
答案 0 :(得分:1)
奇怪的是40行大于6MB。
从未尝试过,但您可以使用grid.getDataCommunicator()。setMinPushSize(size)来设置最小项目数。它已经初始化为40,所以我猜你可以降低它以防止你的反应变得很大。但是" min"在名称中表明其他因素也可能影响它,因此您需要对其进行彻底测试。
答案 1 :(得分:-1)
通过手动更改限制值来解决问题。
grid.setDataProvider((sortorder, offset, limit) -> {
try {
limit=20;
return billingClient.getInvoiceListByCriteria(criteria, (long) offset, (long) limit).stream();
} catch (Exception e) {
logger.error("Exception while getInvoiceListByCriteria", e);
return null;
}
}, () -> {
try {
totalInvoices = billingClient.getCountInvoiceListByCriteria(criteria).longValue();
Integer count = totalInvoices.intValue();
if (count == 0)
Notification.show("No Invoices found.", Notification.Type.HUMANIZED_MESSAGE);
return count;
} catch (Exception e) {
logger.error("Error occured while getting count calling getCountInvoiceListByCriteria", e);
Notification.show("Error while getting count", Notification.Type.ERROR_MESSAGE);
return null;
}
});
根据我设定的限制调整偏移量。