Добавление поведения сортировки к динамически генерируемым столбцам

Версии:

Обновление MyFaces 2.1.14 RichFaces 4.3.5

Код:

<rich:dataTable var="row" value="#{bean.rowData}"  index="dataIndex">

        <rich:columns value="#{bean.columnData}" var="column" index="ind" sortBy="#{row[column.id].sort}" sortOrder="#{bean.sortOrder[column.id]}">
            <f:facet name="header">
                <h:outputText value="#{column.header}" />
            </f:facet>          
        #{row.value}
        </rich:columns>                 
</rich:dataTable>

Проблема:

Мы переходим с JSF 1.2 на JSF 2. Как показано в приведенном ниже фрагменте кода, мы использовали <rich:columns> для динамического создания столбцов и добавления функции сортировки для столбцов. Поскольку <rich:columns> теперь удалено, нам нужно использовать <c:forEach> для создания динамических столбцов в соответствии с Динамические столбцы с Richfaces 4

Но остается проблема, как добавить поведение сортировки для столбцов.

Есть ли альтернатива?

Пожалуйста помоги.

ИЗМЕНИТЬ 1:

Я могу получить желаемое поведение с помощью приведенного ниже кода, как указано в комментариях к вопросу.

<rich:extendedDataTable id="masterTable" var="row" value="#{bean.rowData}"  index="dataIndex" render="masterTable">       
    <c:forEach items="#{bean.columnData}" var="column">                     
        <rich:column sortBy="#{row[column.id].sort}" sortOrder="#{bean.sortOrder[column.id]}"> 
                    <f:facet name="header">
                        <h:outputText value="#{column.header}" />
                    </f:facet>          
                    #{row.value}
            </rich:column>
    </c:forEach>               
</rich:extendedDataTable>

Причина использования <rich:extendedDataTable> заключается в том, что он позволяет встроенную сортировку со стрелками (для отображения порядка сортировки). Вышеуказанная установка работает. Проблема в том, что после того, как я нажму на заголовок столбца для сортировки, ajax reRendering, похоже, не работает. Требуется ручное обновление страницы, после чего на странице отображаются отсортированные данные. Я наблюдал ту же проблему ранее в другом месте с <c:forEach> . Когда я удалил <c:forEach> с помощью <rich:dataGrid> , это сработало. Но в этом случае, согласно сообщению Динамические столбцы с богатыми лицами 4, я должен придерживаться <c:forEach>

EDI 2: проблема рендеринга ajax наблюдается, когда сортировка применяется к другому столбцу, а не к текущему. После обновления страницы сортировка для этого конкретного столбца работает нормально, пока для сортировки не будет применен другой столбец.


person Atul    schedule 06.02.2014    source источник
comment
Есть ли проблема с использованием sortBy для rich:column? То же, что и здесь (с той лишь разницей, что вы будете использовать c:forEach с богатым: столбцом внутри): showcase.richfaces.org/richfaces/   -  person Andrey    schedule 06.02.2014
comment
См. этот ответ. Это может помочь.   -  person Vasil Lukach    schedule 07.02.2014
comment
@Андрей,@Василь : Спасибо за ваш вклад. Я могу немного прогрессировать. Я обновил свой вопрос соответственно. Проблема рендеринга все еще существует   -  person Atul    schedule 07.02.2014
comment
@VasilLukach: согласно вашему ответу на вопрос stackoverflow.com/questions/9971651/ , как добавить две стрелки для сортировки, если для сортировки используется ‹h:commandLink›   -  person Atul    schedule 07.02.2014
comment
Вот так: <f:facet name="header"> <h:commandLink value="#{msg.prgId}"> <rich:componentControl target="chTable" operation="sort"> <f:param name="column" value="programCode"/> <f:param value=""/> <f:param name="reset" value="true"/> </rich:componentControl> <h:graphicImage value="/img/sort_asc.gif" style="border: 0px; vertical-align: middle;" rendered="#{chAction.clients.order == 'programCode ASC'}"/> <h:graphicImage value="/img/sort_des.gif" rendered="#{chAction.clients.order == 'programCode DESC'}" /> </h:commandLink> </f:facet>   -  person Vasil Lukach    schedule 07.02.2014
comment
Извините, недостаточно места для полного кода rich:column. Идея состоит в том, чтобы использовать 3 изображения для 1) сортировки по возрастанию, 2) сортировки по убыванию, 3) несортировки и рендеринга или использования EL для построения атрибута value изображения на основе необходимой сортировки.   -  person Vasil Lukach    schedule 07.02.2014