Vaadin binder 写入继承的抽象类的实例

Posted

技术标签:

【中文标题】Vaadin binder 写入继承的抽象类的实例【英文标题】:Vaadin binder writing to an instance of an inherited abstract class 【发布时间】:2022-01-11 06:29:23 【问题描述】:

在我的 Vaadin 应用程序中,我正在尝试构建用户管理视图。它应该由能够维护多个用户角色的 CRUD 组件组成。每个角色都有自己的类。

这是我的类层次结构。这一切都始于一个共同的祖先:

public abstract class AbstractUser 

    private String name;
    private Color favColor;

    ... other common fields and methods ...


然后是孩子:

public class User extends AbstractUser 

    ... additional methods ...


public class Admin extends User 

    ... additional methods ...


public class SuperAdmin extends Admin 

    ... additional methods ...



绊脚石:您不能使用我习惯的com.vaadin.flow.data.binder.Binder 和抽象类来管理所有用户类型。当我尝试单击 crud 组件中的 New Item 按钮时,活页夹会尝试创建 AbstractUser 的新实例,这当然会失败。

那么处理这个问题的最佳方法是什么?

所有类都有相同的字段,所有这些字段都是由编辑器设置的。我不需要在此视图中更改用户角色,我想要的只是在创建新用户时活页夹不会失败。除了基本的User 之外,不需要新的项目编辑器来创建其他类型的用户。

我对如何做到这一点有一些想法,但我想要最干净的解决方案。

【问题讨论】:

这些真的是子类,而不仅仅是可以用枚举角色管理的类型吗? @SimonMartinelli 是的,例如Admin 有基本的User 无法做到的方法,所以为了保持优雅,每个角色都由一个单独的类表示。 我会说 Crud 组件不适用于抽象类 为什么需要 AbstractUser。管理员和超级管理员不也是用户吗? 这是我的建议。 【参考方案1】:

Crud 组件不能与抽象类一起使用。 我通过不使用AbstractUser 并创建一个泛型类型User 的crud 解决了这个问题,所以它也可以用AdminSuperAdmin 填充。

【讨论】:

以上是关于Vaadin binder 写入继承的抽象类的实例的主要内容,如果未能解决你的问题,请参考以下文章

ts 类的变量、方法、实例化、继承、实现接口、抽象类

141-PHP类的抽象方法和继承实例

抽象类

获取从抽象类继承并在属性中具有特定值的类的实例

php 抽象类abstract

php 抽象类abstract