Используя t: datatable, вам на самом деле не нужен t: commandSortHeader, если только вы не хотите настроить, какое свойство он использует для сортировки.
Вот что вам нужно, чтобы это работало:
<h:form>
<t:dataTable
id="data"
value="#{BACKINGBEAN.DATA}"
var="item"
sortColumn="#{BACKINGBEAN.sortColumn}"
sortAscending="#{BACKINGBEAN.sortAscending}">
...
<t:column defaultSorted="true" sortable="true">
<f:facet name="header">
<h:outputText value="header text"/>
</f:facet>
<h:outputText value="#{item.property}" />
</t:column>
...
</t:dataTable>
</h:form>
Тогда в вашем бобе поддержки:
private String sortColumn;
private boolean sortAscending;
со стандартными getter / setters / lombok. Они просто для того, чтобы тег мог устанавливать данные.
Это отличная ссылка:
http://wiki.apache.org/myfaces/Working_with_auto_sortable_tables
Но он пропускает обсуждение свойств базового компонента, а также того, что его нужно заключить в <h:form>
, даже если у вас нет элементов формы.