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 解决了这个问题,所以它也可以用Admin
和SuperAdmin
填充。
【讨论】:
以上是关于Vaadin binder 写入继承的抽象类的实例的主要内容,如果未能解决你的问题,请参考以下文章