向动态生成的列添加排序行为

时间:2014-02-06 16:30:18

标签: jsf-2 richfaces columnsorting

版本:

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渲染问题。刷新页面后,对该特定列的排序工作正常,直到应用另一列进行排序。

0 个答案:

没有答案