如何解决如何在单个dataTable中显示来自不同对象类型的不同值?
| 我有一个对象(票证),其中有其他对象(消息)的列表。消息是抽象的,并且具有多个子类-例如EditMessage,CreationMessage等。因此,票证对象包含这些消息的混合,并且按其创建时间对其进行排序。 现在我想在Facelets页面中显示所有这些消息,并且我需要输出特定于该消息类型的字段的值:即EditMessage中的editedField,CreationMessage中的userName,... 最明显的方法似乎是使用h:dataTable:<h:dataTable value=\"#{ticketController.ticket.messages}\" var=\"msg\" >
// determine type of message,cast,and use <c:if> to output needed values
</h:dataTable>
问题是Facelets表达式语言没有\“ instanceof \”和强制类型转换。据我所知,可以通过对托管bean进行一些丑陋的往返操作,确定标准Java中消息的类型,返回所需类型的消息等来解决此问题。
有没有更好,更易理解和简洁的方法?
解
我的主要问题是使用<h:dataTable value=\"#{ticketController.ticket.messages}\" var=\"msg\" >
<h:column>
<h:panelGroup rendered=\"#{msg.class.name == \'org.rogach.tsnt.TextMessage\'}\" >
<h:outputText value=\"msg.text\" />
</h:panelGroup>
<h:outputText value=\"#{msg.creationTime}\" />
</h:column>
</h:dataTable>
而且,不需要任何演员表。
解决方法
代替instanceof,比较对象的类的名称。
说:
<c:if test=\"${xxx.class.name == \'CreationMessage\'}\">
或c:选择
而且您不需要EL的任何转换。如果对象没有您指定的某些属性,则它会给出一个异常,如果它具有确定的属性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。