Omnifaces of: secondsBetween EL функция не может быть преобразована в ЧЧ: мм: сс от: formatDate - PullRequest
0 голосов
/ 12 марта 2019

Добрый день

Мне нужно отобразить дельта-время как разницу между двумя экземплярами java.date.Util в формате 'ЧЧ: мм: сс'

Библиотека Omnifaces выглядит оченьудобно вычислять разницу в секундах между этими двумя экземплярами java.date.Util, которые всегда будут в один и тот же день.

Одно значение задается с помощью компонента календаря Primefaces в верхней части файла .xhtml.как это:

<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, как показано ниже (корректно работает только столбец времени, показанный как все остальные столбцы):

<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 (используя JSF 2.3.5.SP1 на WildFly 15) преобразовать эти длинные значения в формат 'HH: mm: ss'?

EDIT:

Я знаю, что это легко сделать, передавая long raceTime методу управляемого компонента и получая строку обратно из компонента;однако, если это можно сделать более кратко с помощью EL или Omnifaces, я бы предпочел следовать этому подходу.

1 Ответ

1 голос
/ 12 марта 2019

В соответствии с of:formatDate он ожидает java.util.Date, а не java.lang.Long, поэтому следует ожидать classcast, поскольку возвращаемое значение of:secondsBetweenне java.util.Date.

Итак, то, что вы испытываете, полностью соответствует ожиданиям.Смотрите 'Смотрите также' для возможного исправления, но делать это в бине поддержки тоже не неправильно (не менее важно).Кроме того, вы также можете написать свою собственную функцию EL, не слишком сложную

См. Также

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...