2017-01-24 7 views
0

У меня есть PrimeFaces DataTable так:р: DataTable Время сортировки

<p:dataTable 
     id="datatable_current_month_timesheets" 
     value="#{timesheetBean.currentMonthTimesheets}" var="item"> 
    <p:column headerText="starttimeDate" sortBy="#{item.starttime}"> 
     <h:outputText value="#{item.starttime}"> 
      <f:convertDateTime pattern="EEE, dd.MM.yyyy" /> 
     </h:outputText> 
    </p:column> 
    <p:column headerText="starttimeTime" sortBy="#{item.starttime}"> //how to sort this? 
     <h:outputText 
      value="#{item.starttime}"> 
      <f:convertDateTime pattern="HH:mm" /> 
     </h:outputText> 
    </p:column> 
    <p:column headerText="timeGap" sortBy="#{item.starttime}"> //how to sort this? 
     <h:outputText 
      value="#{timesheetBean.calculateTimeGap(item)}"> 
      <f:convertDateTime pattern="HH:mm" /> 
     </h:outputText> 
    </p:column> 
</p:dataTable> 

Первая колонка получить sortet прямо с момента его упорядочиваются по дате и он не делает мне никаких проблем. Второй столбец, однако, имеет в основном те же значения, что и первый, но только время в часах: минуты. Третий столбец выполняет некоторые вычисления с течением времени, а также выбирает время. Поскольку я не сохраняю эти значения, я не знаю, как сортировать это по времени!

Пример будет 12:00 после 07:00 и до 14:35. Как я могу это достичь?

+0

Звучит так, как вам нужно использовать пользовательский sortFunction на столбце p: column –

+0

, но как бы я мог сортировать вещи, если значение динамически генерируется? могу ли я сортировать, не указав «sortBy»? – ImKindaLrning

ответ

0

использовать что-то вроде

<p:column headerText="starttimeTime" sortBy="#{item.starttime}" sortFunction="#{timesheetBean.customSort}"> 

и

public int customSort(Object o1, Object o2) { 
    Date d1 = (Date) o1; 
    Date d2 = (Date) o2; 

    // compare d1 and d2 anyway you like and return -1, 0 or 1 

} 

Что вы положили в sortBy решает, что вы получите в качестве аргументов метода. Поэтому, если ваши вычисления включают в себя другие свойства, кроме даты, просто передайте весь элемент с помощью sortBy="#{item}" и корректно выполните аргументы в указанном выше методе.