From 81ca93e9cee460b9033c01a59ba0aaa463f7eb49 Mon Sep 17 00:00:00 2001 From: Anna Koskinen Date: Wed, 2 Dec 2020 12:21:53 +0200 Subject: [PATCH] Replace function reference with anonymous class for serialization (#12137) (#12161) Lambdas and function references do not serialize See: https://vaadin.com/forum/thread/18462951/vaadin-8-stateful-session Authored-by: Tatu Lund --- .../ui/components/grid/GridDragSource.java | 39 ++++++++++--------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/server/src/main/java/com/vaadin/ui/components/grid/GridDragSource.java b/server/src/main/java/com/vaadin/ui/components/grid/GridDragSource.java index e6f8ed2926..3912326a35 100644 --- a/server/src/main/java/com/vaadin/ui/components/grid/GridDragSource.java +++ b/server/src/main/java/com/vaadin/ui/components/grid/GridDragSource.java @@ -85,7 +85,26 @@ public class GridDragSource extends DragSourceExtension> { super(target); // Create drag data generator - dragDataGenerator = this::generateDragData; + dragDataGenerator = new DataGenerator() { + /** + * Drag data generator. Appends drag data to row data json if generator + * function(s) are set by the user of this extension. + * + * @param item + * Row item for data generation. + * @param jsonObject + * Row data in json format. + */ + @Override + public void generateData(Object item, JsonObject jsonObject) { + JsonObject generatedValues = Json.createObject(); + + generatorFunctions.forEach((type, generator) -> generatedValues + .put(type, generator.apply((T) item))); + + jsonObject.put(GridDragSourceState.JSONKEY_DRAG_DATA, generatedValues); + } + }; // Add drag data generator to Grid target.getDataCommunicator().addDataGenerator(dragDataGenerator); @@ -148,24 +167,6 @@ public class GridDragSource extends DragSourceExtension> { .collect(Collectors.toList()); } - /** - * Drag data generator. Appends drag data to row data json if generator - * function(s) are set by the user of this extension. - * - * @param item - * Row item for data generation. - * @param jsonObject - * Row data in json format. - */ - private void generateDragData(T item, JsonObject jsonObject) { - JsonObject generatedValues = Json.createObject(); - - generatorFunctions.forEach((type, generator) -> generatedValues - .put(type, generator.apply(item))); - - jsonObject.put(GridDragSourceState.JSONKEY_DRAG_DATA, generatedValues); - } - /** * Sets a generator function for customizing drag data. The generated value * will be accessible using the same {@code type} as the generator is set -- 2.39.5