如何用JSF2处理多态?

jru*_*ier 5 java polymorphism jsf java-ee-6 jsf-2

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

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

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

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

谢谢 !:)

Bal*_*usC 4

EL 中没有这样的东西instanceof。但是,您也可以(滥用)使用Object#getClass()和访问 EL 中的 getter Class。然后只需确定组件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>
Run Code Online (Sandbox Code Playgroud)

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