0

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

4

2 回答 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]);");
于 2020-12-28T08:44:57.463 回答
2

我完成它添加一个组件作为列。

为此,您需要从

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

您要分组的列,并将它们添加到Horizo​​ntalLayout 渲染器中作为 column。您可以在 Horizo​​ntalLayout 中添加 CheckBox,手动绑定值。

于 2020-12-28T22:53:16.543 回答