将数据列绑定(bind)到数据源中可能存在或不存在的属性的最佳方法是什么?
例如,当您有一个类层次结构时,其中一些 child 可能属于具有该属性的子类型,就会发生这种情况。数据源包含各种子类类型。
<DataColumn outputText="#{item.property}" />
当某个子类中不存在属性时,总是会产生 PropertyNotFoundException。我不想将该属性包含在基类中,因为根据业务规则它不应该存在。
你会如何解决这个问题?
最佳答案
在不更改类的情况下,最好的办法是在 EL 中执行某种instanceof
。您可以通过检查 Object#getClass()
获得的(简单)类名来做到这一点然后 Class#getName()
或 Class#getSimpleName()
在 EL 中。
假设具有该属性的类具有完整的限定名称 com.example.SubItem
,下面是一个示例:
<h:outputText value="#{item.property}" rendered="#{item.class.name == 'com.example.SubItem'}" />
或
<h:outputText value="#{item.property}" rendered="#{item.class.simpleName == 'SubItem'}" />
关于java - JSF 和表达式语言 : Bind property only when it exists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5619183/