Java 为超类和子类动态创建表单

Java 为超类和子类动态创建表单,java,jsf,Java,Jsf,假设我们有类: public class BasicCustomer { private String name; private String email; ----getters and setters omited---- } public class CustomerWithDog extends BasicCustomer{ private String dogName; private String dogRace; ----gett

假设我们有类:

public class BasicCustomer {
    private String name;
    private String email;
    ----getters and setters omited----
}

public class CustomerWithDog extends BasicCustomer{
    private String dogName;
    private String dogRace;
    ----getters and setters omited----
}

public class CustomerWithCat extends BasicCustomer{
    private String catName;
    private String catRace;
    ----getters and setters omited----
}
只有当客户登录时,我才能推断出他是哪种类型的人

问题: 是否有一种方法可以为特定类型的客户动态创建带有适当字段的表单(CustomerWithCat应该查看包含名称、电子邮件、catName和catRace输入的表单)

如果我使用
java.lang.reflect.Field
类从类中获取字段,那么我应该使用
Field.setAccessible(true)
(因为字段是私有的),这另一方面违反了封装(绕过getter和setter,这不是我想要的)

我看:


解决方案1,但我不知道如何填充值属性,因为如果用户是BasicCustomer,则即使未呈现也无法引用CustomerWithCat中的字段。

我将通过创建一个
FormGenerator
类来实现这一点,该类为每种类型生成具有适当子类的表单。然后,每个客户类型返回相应的生成器。或者你可以有一个FormGeneratorFactory。为什么你要动态创建表单,这会增加复杂性和开销?因为您有具体的类,所以可以为每个类使用单独的表单,并根据用户类型有条件地切换到或呈现适当的表单。我认为,为每个用户类型定制一个表单会更容易,但显然,我错了。无论如何,谢谢你。