如何使用JSF2处理多态?
我需要显示/编辑多态实体。
我的抽象类是Person 。 我的具体课程是PhysicalPerson和MoralPerson
每个具体类都有自己的自定义属性。
如何根据实体类使用适当的显示/编辑(复合)组件?
谢谢 ! 🙂
在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级检查方法更具普遍性。