Как разместить два флажка в одной строке в Vaadin CRUD?

У меня есть entity с этими двумя полями.

private boolean alarmActive;
private boolean messageHasBeenSent;

И когда я показываю это с помощью Vaadin CRUD API.

GridCrud<Alarm> alarmCrud = new GridCrud<>(Alarm.class);
CrudFormFactory<Alarm> crudFormFactory = new DefaultCrudFormFactory<Alarm>(Alarm.class);
alarmCrud.setCrudFormFactory(crudFormFactory);
alarmCrud.getGrid().setColumns("name", "email", "message", "alarmActive", "messageHasBeenSent", "sa0Min", "sa0Max", "sa1Min", "sa1Max", "sa1dMin", "sa1dMax", "sa2dMin", "sa2dMax", "sa3dMin", "sa3dMax", "a0Min", "a0Max", "a1Min", "a1Max", "a2Min", "a2Max", "a3Min", "a3Max");
alarmCrud.getGrid().setColumnReorderingAllowed(true);
crudFormFactory.setUseBeanValidation(true);
crudFormFactory.setVisibleProperties(new String[] { "name", "email", "message", "alarmActive", "messageHasBeenSent", "sa0Min", "sa0Max", "sa1Min", "sa1Max", "sa1dMin", "sa1dMax", "sa2dMin", "sa2dMax", "sa3dMin", "sa3dMax", "a0Min", "a0Max", "a1Min", "a1Max", "a2Min", "a2Max", "a3Min", "a3Max" });
        

Я получаю это представление, когда пытаюсь добавить новую строку в базу данных CRUD.

Вопрос:

Я хочу, чтобы оба флажка были в одной строке? Как я могу сделать это с этим текущим объектом?

Я знаю, что есть способ иметь несколько флажков в одной строке, но этот метод не является правильным, потому что он зависит от того, что каждый флажок должен стать сущностью, и эта сущность не связана с моей сущностью CRUD базы данных.

В приведенном ниже примере он использовал

@ManyToMany
@Fetch(FetchMode.JOIN)
@NotNull
private Set<Group> groups = new HashSet<>();

Чтобы создать несколько флажков в одной строке. Проблема в том, что сущность Group отличается от сущности User, если они начинаются с пустого.

Здесь он загружает groupService в поставщик флажков, и это создает несколько флажков в одной строке.

crud.getCrudFormFactory().setFieldProvider("groups", new CheckBoxGroupProvider<>("Groups", groupService.findAll(), Group::getName));

https://github.com/alejandro-du/crudui/blob/master/demo/src/main/java/org/vaadin/crudui/demo/ui/view/SimpleCrudView.java

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
117
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Возможно, есть лучшее решение, но одним из обходных путей является добавление разрыва строки после поля Message с помощью JavaScript. Это должно привести к установке обоих флажков в одной строке.

Для этого вам нужно добавить прослушиватель, открытый в редакторе, в котором вы выполняете следующий код, чтобы добавить разрыв строки

com.vaadin.flow.component.UI.getCurrent().getPage()
        .executeJs("formLayout = document.getElementsByTagName('vaadin-form-layout')[0];"
                + "var br = document.createElement('br');"
                + "formLayout.insertBefore(br, formLayout.children[3]);");

Спасибо. Но я не хочу использовать JavaScript с Vaadin. Это создает беспорядочный код. ;) Если невозможно установить флажки в одной строке с этой формой объекта, то я должен признать, что это невозможно.

euraad 28.12.2020 15:13

Понятно. Вы также можете задать вопрос на странице этого аддона: vaadin.com/directory/component/crud-ui-add-on/discussions. Возможно, у кого-то там будет идея получше.

Tarek Oraby 29.12.2020 06:50
Ответ принят как подходящий

Я сделал это, добавив компонент в качестве столбца.

Для этого нужно удалить из

alarmCrud.getGrid().setColumns(...)

столбцы, которые вы хотите сгруппировать, и добавьте их вместо HorizontalLayout в качестве столбца. В HorizontalLayout можно добавить CheckBox, вручную привязывая значения.

Можете ли вы объяснить больше?

euraad 29.12.2020 00:01

Другие вопросы по теме