Версии:
Обновление 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 наблюдается, когда сортировка применяется к другому столбцу, а не к текущему. После обновления страницы сортировка для этого конкретного столбца работает нормально, пока для сортировки не будет применен другой столбец.
<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.2014rich:column
. Идея состоит в том, чтобы использовать 3 изображения для 1) сортировки по возрастанию, 2) сортировки по убыванию, 3) несортировки и рендеринга или использования EL для построения атрибутаvalue
изображения на основе необходимой сортировки. - person Vasil Lukach   schedule 07.02.2014