java - JSF 和表达式语言 : Bind property only when it exists

标签 java jsf el

将数据列绑定(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/

相关文章:

java - 在 Web 应用程序 Java 中创建聊天

jsf-2 - 获取EL中字符串的长度

java - Panel 中两个表之间的焦点遍历

java - Safari 无法下载此文件 (Passbook Pass)

javascript - 根据下拉框中的选择在网站上显示数据

java - 如何从 JSF/ADF validator 获取旧值?

jsf - Glassfish 3 + 耳朵 + logback.xml

java - 使用 JSTL 获取 url 中的域名?

jsf - 字符串包含jsf中的方法

java - 使用 JPA 和 spring 数据源实例连接到不同的数据源