У меня есть 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));
Возможно, есть лучшее решение, но одним из обходных путей является добавление разрыва строки после поля 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]);");
Понятно. Вы также можете задать вопрос на странице этого аддона: vaadin.com/directory/component/crud-ui-add-on/discussions. Возможно, у кого-то там будет идея получше.
Я сделал это, добавив компонент в качестве столбца.
Для этого нужно удалить из
alarmCrud.getGrid().setColumns(...)
столбцы, которые вы хотите сгруппировать, и добавьте их вместо HorizontalLayout в качестве столбца. В HorizontalLayout можно добавить CheckBox, вручную привязывая значения.
Можете ли вы объяснить больше?
Спасибо. Но я не хочу использовать JavaScript с Vaadin. Это создает беспорядочный код. ;) Если невозможно установить флажки в одной строке с этой формой объекта, то я должен признать, что это невозможно.