如何使用JSF2处理多态?

我需要显示/编辑多态实体。

我的抽象类是Person 。 我的具体课程是PhysicalPersonMoralPerson

每个具体类都有自己的自定义属性。

如何根据实体类使用适当的显示/编辑(复合)组件?

谢谢 ! 🙂

在EL中没有像instanceof这样的东西。 但是,您可以(ab)使用Object#getClass()并访问EL中的Class的getter。 然后只需确定组件的rendered属性中的结果。

  

According to Class#getName(), this is a PhysicalPerson.

According to Class#getSimpleName(), this is a MoralPerson.

然而,自定义ELfunction会更干净。 请注意,由于EL中允许的属性名限制极为严格,因此上述内容不适用于Tomcat 7和克隆。 不再允许Java保留的文字,例如class 。 你需要#{entity['class'].name}等等。

另一种方法是在基类中创建一个抽象方法,它将返回一些您拥有的实例的标记,并在子类中实现它,如下所示:

 public abstract class Person { public abstract boolean isPhysical(); } public PhysicalPerson extends Person { public boolean isPhysical() { return true; } } 

然后在jsf中:

  

this is a PhysicalPerson.

this is a Moral Person.

然而,class级检查方法更具普遍性。