Я пытаюсь создать небольшое приложение, в котором у меня есть различные местоположения файлов, хранящиеся в сетке Vaadin, сетка в настоящее время показывает только два столбца - ID
и File Name
, и я хотел бы видеть в качестве уведомления файл Расположение тоже всякий раз, когда я нажимаю на строку.
То есть каждый раз, когда я щелкаю строку в сетке, я хотел бы, чтобы она показывала мне местоположение, используя Notification.show()
, например:
(Пожалуйста, игнорируйте <b></b>
s, они не имеют значения.)
Поскольку моя модель выбора сеток MULTI
, по умолчанию прослушиватель щелчков не может регистрировать, по какой строке щелкнули, и выбор строки с помощью флажка - это не то, что я хочу иметь данные отображаются. Проще говоря, я хотел бы получить элемент для каждой строки, которую я нажимаю, и отображать местоположение в качестве уведомления.
Пока что я нашел решение для аналогичной проблемы, но оно касается столбцов, и строки в сетках Ваадина довольно сильно отличаются от того, к чему я привык.
public static <T> void addColumnClickListener(Grid<T> grid, Consumer<Column<T>> listener)
{
String expression = "function(){const col=element.getEventContext(event).column;return col ? col.id : '';}()";
grid.getElement().addEventListener("click", e ->
{
String colId = e.getEventData().getString(expression);
Optional<Column<T>> column = grid.getColumns().stream().filter(col -> colId.equals(col.getId().get())).findFirst();
column.ifPresent(listener);
}
).addEventData(expression);
}
И я чтобы вызвать такую функцию:
addColumnClickListener(grid, column -> Notification.show("fubar"));
Этот фрагмент кода взят из форумов Vaadin , и я не совсем понимаю его. Кажется, что строка expression
содержит возможный код JavaScript, а остальное переопределяет тип столбца. (я думаю, я действительно не совсем понимаю этот фрагмент)
Есть ли способ сделать что-то похожее на фрагмент выше, кроме строк?