如何在vaadin crud的同一行中放置两个复选框?

g6baxovj  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(362)

我有一个 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

wnrlj8wa

wnrlj8wa1#

也许有一个更好的解决方案,但一个解决方法是在 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]);");
ut6juiuv

ut6juiuv2#

我添加了一个组件作为列。
为此,您需要从

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

要分组的列,并将它们添加到呈现为列的水平布局中。在水平布局中,可以添加复选框,手动绑定值。

相关问题