Omnifaces of:secondsBet之间的EL函数无法转换为HH:mm:ss by:formatDate

问题描述 投票:0回答:1

美好的一天

我需要将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更简洁地完成,我宁愿遵循这种方法。

date jsf primefaces jsf-2 omnifaces
1个回答
1
投票

根据of:formatDate,它预计java.util.Date而不是java.lang.Long,所以由于of:secondsBetween的返回值不是java.util.Date,所以预期播报。

所以你所经历的完全符合预期。有关可能的修复,请参阅“另请参阅”,但在辅助bean中执行此操作也没有错误(并非不那么简单)。此外,您还可以编写自己的EL功能,而不是太困难

也可以看看

© www.soinside.com 2019 - 2024. All rights reserved.