java-如何在单个dataTable中显示来自不同对象类型的不同值?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-如何在单个dataTable中显示来自不同对象类型的不同值?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1351字,纯文字阅读大概需要2分钟。
内容图文
![java-如何在单个dataTable中显示来自不同对象类型的不同值?](/upload/InfoBanner/zyjiaocheng/653/f0d117e4ec224d68a82de28cd608658b.jpg)
我有一个对象(票证),其中有其他对象(消息)的列表.消息是抽象的,并且具有几个子类-例如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中消息的类型,返回所需类型的消息等来解决.
有没有更好,更易理解和简洁的方法?
解
我的主要问题是< c:if>标签.原来,这是一个JSTL标签,因此它的渲染生命周期略有不同.取而代之的是,我现在使用< h:panelGroup>及其“已渲染”属性.
一些代码:
<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进行任何转换.如果对象没有您指定的属性,它将给出一个异常,如果它具有确定的话.
内容总结
以上是互联网集市为您收集整理的java-如何在单个dataTable中显示来自不同对象类型的不同值?全部内容,希望文章能够帮你解决java-如何在单个dataTable中显示来自不同对象类型的不同值?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。