美好的一天
我需要将delta时间显示为两个java.date.Util实例之间的差异,格式为'HH:mm:ss'
Omnifaces库在计算这两个始终在同一天的java.date.Util实例之间的秒差异时非常方便。
使用.xhtml文件顶部的Primefaces日历组件设置一个值,如下所示:
<p:outputLabel for="datetime" value="Marathon Race Start: "/>
<p:calendar id="datetime" value="#{resultsView.marathonStart}" pattern="yyyy/MM/dd HH:mm:ss">
<p:ajax event="change" immediate="true" update="marathon_results_form:results_all_datatable"/>
</p:calendar>
然后结果显示在Primefaces dataTable中,如下所示(只显示所有其他列工作正确的时间列):
<p:column headerText="Time - Completed" style="text-align: center; align-content: left">
<c:set var="raceTime" value="#{of:secondsBetween(resultsView.marathonStart,allResults.dateTimeStamp)}"/>
#{of:formatDate(raceTime, 'HH:mm:ss')}
</p:column>
上面的代码片段引发运行时错误,指出:
cannot convert of type class java.lang.Long to class java.util.Date
如果我删除Omnifaces:
#{of:formatDate(raceTime, 'HH:mm:ss')}
并仅替换为:
#{raceTime}
将整列转换为:
<p:column headerText="Time - Completed" style="text-align: center; align-content: left">
<c:set var="raceTime" value="#{of:secondsBetween(resultsView.marathonStart,allResults.dateTimeStamp)}"/>
#{raceTime}
</p:column>
通过在表格列中显示一个长的秒数,它确实可以正常工作;并且只要通过Primefaces日历更新开始时间,就可以在表格中实时进行长时间更新;完全应该。
那么,我如何在EL(在WildFly 15上使用JSF 2.3.5.SP1)将这些长片转换为'HH:mm:ss'格式?
编辑:
我知道这可以通过将long raceTime传递给托管bean的方法并从bean中获取字符串来轻松完成。但是,如果可以通过EL或Omnifaces更简洁地完成,我宁愿遵循这种方法。
根据of:formatDate
,它预计java.util.Date
而不是java.lang.Long
,所以由于of:secondsBetween
的返回值不是java.util.Date
,所以预期播报。
所以你所经历的完全符合预期。有关可能的修复,请参阅“另请参阅”,但在辅助bean中执行此操作也没有错误(并非不那么简单)。此外,您还可以编写自己的EL功能,而不是太困难
也可以看看