版本:
Aapche 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>
生成动态列
Dynamic columns with 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>
时,它有效。但在这种情况下,根据帖子Dynamic columns with richfaces 4,
我必须坚持使用<c:forEach>
EDI 2: 当排序应用于另一列而不是当前列时,会观察到ajax渲染问题。刷新页面后,对该特定列的排序工作正常,直到应用另一列进行排序。