繁体   English   中英

如何使用JSF2处理多态?

[英]How to handle polymorphism with JSF2?

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

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

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

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

谢谢 ! :)

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM