Динамические столбцы Primefaces p:columns сортируют определенные столбцы

у меня есть datatable с динамическими столбцами, определенными columnModel. Свойство String ссылается на правильное поле (используется для вывода значения). Строка сортировки равна свойству, но некоторые столбцы не должны быть сортируемыми, sort имеет значение null или emtpy (пробовал оба):

public class ColumnModel {
    private String property;
    private String sort;
    private int width;

    //GETTER
    ...
}

Я использую список этих моделей для создания динамических столбцов. Использование ширины работает хорошо:

<p:dataTable value="#{bean.items}" var="item" ... >

    <p:columns value="#{bean.columnModel}" var="column" sortBy="#{column.sort}" width="#{column.width}">
        ...
    </p:columns>
</p:dataTable>

Мой вопрос: sortBy не допускает значение null или emtpy. В противном случае я получаю исключение синтаксического анализа, в котором говорится, что он не может проанализировать # {item.}. Primefaces, кажется, автоматически добавляет «элемент» (моя переменная таблицы данных) перед данным полем сортировки.

Как можно игнорировать некоторые столбцы?

Спасибо за ваши ответы!

Использование простых лиц 5.0.9 с Wildfly 9.0.2


person kaiser    schedule 11.07.2016    source источник
comment
Пробовали более новую версию PF? И я не могу использовать более новую версию, это неправильный ответ ;-). Попытка увидеть, решена ли она в более новой версии, всегда возможна в простом тестовом проекте (минимальный воспроизводимый пример) .   -  person Kukeltje    schedule 12.07.2016
comment
спасибо за ваш ответ, в Primefaces 5.2 есть новый атрибут именно для этой проблемы.   -  person kaiser    schedule 12.07.2016
comment
Пожалуйста. Вы можете создать ответ самостоятельно. Пожалуйста, сделайте так, как это может быть полезно для других   -  person Kukeltje    schedule 12.07.2016


Ответы (1)


Primefaces добавил новые атрибуты для p:column(s) в версии 5.1.3 и 5.2.0:

  • сортируемый
  • фильтруемый

Вот ссылка на решенную проблему:

https://code.google.com/archive/p/primefaces/issues/5021

Пример в зависимости от моего кода выше:

public class ColumnModel {
    private String property;
    private boolean sortable;
    private int width;

    //GETTER
    ...
}

С заданным List<ColumnModel> columnModel в bean-компоненте:

<p:dataTable value="#{bean.items}" var="item" ... >

    <p:columns value="#{bean.columnModel}" var="column" sortBy="#{item[column.property]}" field="#{column.property}" sortable="#{column.sortable}" width="#{column.width}">
        ...
    </p:columns>
</p:dataTable>
person kaiser    schedule 12.07.2016