Простые лица получают имя отсортированного столбца - PullRequest
1 голос
/ 25 октября 2019

Мне нужно получить имя отсортированного / отфильтрованного столбца в моей таблице данных. С помощью «фильтра» ajax-события я получаю отфильтрованное значение и имя столбца. Для сортировки я использовал четную сортировку, но не смог найти метод, который возвращает мне имя отсортированного столбца

<p:dataTable id="userTable" var="user" value="#{userController.lazyModel}"
             widgetVar="userTableVar" selection="#{userController.selectedUser}" 
             paginator="true" rows="#{userController.defaultRows}" paginatorPosition="bottom" rowSelectMode="checkbox"
             lazy="true"
             paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {PageLinks} {CurrentPageReport} {NextPageLink} {LastPageLink}"                                                             
             rowKey="#{user.userId}" rowsPerPageTemplate="#{userController.rowOptions}"
             emptyMessage="#{bundle.noRows}" >

    <p:ajax event="sort" listener="#{userController.onSort}"></p:ajax>
    <p:ajax event="filter" listener="#{userController.onFilter}"></p:ajax>

    <p:column selectionMode="multiple" style="width:16px;text-align:center"/>

    <p:column sortBy="#{user.username}"  filterBy="#{user.username}" style="width: 20%;" >
        <f:facet name="header" >
            <h:outputText value="Username"></h:outputText>
        </f:facet>
        <h:outputText value="#{user.username}"></h:outputText>
    </p:column>

    <p:column sortBy="#{user.userRight}"  filterBy="#{user.userRight}" style="width: 20%;" >
        <f:facet name="header" >
            <h:outputText value="Userright"></h:outputText>
        </f:facet>
        <h:outputText value="#{user.userRight}"></h:outputText>
    </p:column>


</p:dataTable>
public void onSort(SortEvent event) {
     System.out.println(event.isAscending() + " - "
                        + event.getSortColumnIndex() + " - "
                        + event.getSortColumn().getField());
}

public void onFilter(FilterEvent event) {
     System.out.println(event.getFilters());
}

1 Ответ

1 голос
/ 25 октября 2019

Вам необходимо установить атрибут field для p:column.

Из документации :

Имя поля для передачи lazyметод загрузки для фильтрации и сортировки. Если не указано, для идентификации имени поля используются значения filterBy / sortBy.

Тогда будет работать event.getSortColumn().getField().

...