[英]How to handle polymorphism with JSF2?
我需要显示/编辑多态实体。
我的抽象类是Person 。 我的具体课程是PhysicalPerson和MoralPerson
每个具体的类都有其自己的自定义属性。
如何可以根据实体类使用适当的显示/编辑(复合)组分?
谢谢 ! :)
EL中没有诸如instanceof
这样的东西。 但是,您可以(AB)利用Object#getClass()
和访问的干将Class
的EL为好。 然后只需在组件的rendered
属性中确定结果即可。
<h:panelGroup rendered="#{entity.class.name == 'com.example.PhysicalPerson'}">
<p>According to Class#getName(), this is a PhysicalPerson.</p>
</h:panelGroup>
<h:panelGroup rendered="#{entity.class.simpleName == 'MoralPerson'}">
<p>According to Class#getSimpleName(), this is a MoralPerson.</p>
</h:panelGroup>
但是,自定义EL功能将更加简洁。 注意的是,上述不在Tomcat 7和克隆由于EL允许propertynames的极其严格的限制工作。 不再允许使用Java保留的文字(例如class
。 您将需要#{entity['class'].name}
,依此类推。
另一种方法是在基类中创建一个抽象方法,该方法将为您返回所拥有实例的标记,并在子类中实现该方法,如下所示:
public abstract class Person {
public abstract boolean isPhysical();
}
public PhysicalPerson extends Person {
public boolean isPhysical() {
return true;
}
}
然后在jsf中:
<h:panelGroup rendered="#{entity.physical}">
<p>this is a PhysicalPerson.</p>
</h:panelGroup>
<h:panelGroup rendered="#{ not entity.physical}">
<p>this is a Moral Person.</p>
</h:panelGroup>
但是,类检查方法更为通用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.