【问题标题】:p:dataTable sorting Timep:dataTable排序时间
【发布时间】:2017-01-24 14:27:11
【问题描述】:

我有一个像这样的 PrimeFaces 数据表:

<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>

第一列得到正确的排序,因为它是按日期排序的,它不会给我带来任何问题。 然而,第二列的值与第一列基本相同,但仅以小时为单位:分钟。 第三列对时间进行一些计算,并获取时间。 由于我不保存这些值,我不知道如何按时间排序!

例如 12:00 在 07:00 之后和 14:35 之前。 我怎样才能做到这一点?

【问题讨论】:

  • 听起来你需要在 p:column 上使用自定义 sortFunction
  • 但是如果值是动态生成的,我将如何排序?我可以在不指定“sortBy”的情况下进行排序吗?

标签: primefaces datatable


【解决方案1】:

使用类似的东西

<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}" 传输整个项目并在上述方法中正确转换参数。

【讨论】:

    猜你喜欢
    • 2013-11-20
    • 2017-10-17
    • 1970-01-01
    • 2016-02-27
    • 2021-10-29
    • 2012-04-19
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多