在sorted rich:dataTable中选择一行

时间:2012-10-15 15:23:52

标签: java ajax jsf-2 richfaces richdatatable

我有一个rich:dataTable组件(RF 4.2.2.Final)。我已经为表添加了rowclick监听器,以根据行选择更新详细视图。一切都很好。 但现在我正在尝试让我的dataTable具有可排序的标题。我按照RF展示,发现如果dataTable中的数据不是自然顺序,行选择不能正常工作 - 这意味着数据在appQueryBean的列表中。 但我确信类似的情况在RF 3.X中很好

我的页面:

<h:form id="appFormId">
    <div>
        <rich:dataTable id="appListTableId" value="#{appQuery.applicationList}" 
                        var="row" rendered="#{!empty appQuery.applicationList}"
                        rows="50" styleClass="styledTable">
            <a:ajax 
               listener="#{appQuery.actionListener(row.id)}"
                event="rowclick" render=":applistform:appViewId"/> 
            <rich:column style="width:10%">
                <f:facet name="header">#{msg['ID']}</f:facet>
                <h:outputText value="#{row.id}" />
            </rich:column>
            <rich:column style="width:20%" sortBy="#{row.code}" 
                  sortOrder="#{applicationSortManager.sortOrder}">
                <f:facet name="header">
                    <a:commandLink 
                        value="#{msg['APPLICATION.CODE']}" render="appListTableId" 
                        action="#{applicationSortManager.sortByCode}" /></f:facet>
                <h:outputText value="#{row.code}" />
            </rich:column>
            <rich:column style="width:50%">
                <f:facet name="header">#{msg['APPLICATION.NAME']}</f:facet>
                <h:outputText value="#{row.name}" />
            </rich:column>
            <f:facet name="footer">
                <rich:dataScroller id="appBottomScroller" for="appListTableId" 
                        renderIfSinglePage="false" immediate="true" align="left"/>
        </f:facet>    
        </rich:dataTable>
    <div>
</h:form>

和ApplicationSortManager:

@Named
@SessionScoped
public class ApplicationSortManager implements Serializable{

private SortOrder sortOrder = SortOrder.unsorted;

public void sortByCode(){
    if (sortOrder.equals(SortOrder.ascending)) {
        setSortOrder(SortOrder.descending);
    } else {
        setSortOrder(SortOrder.ascending);
    }
}

/**
 * @return the sortOrder
 */
public SortOrder getSortOrder() {
    return sortOrder;
}

/**
 * @param _sortOrder the sortOrder to set
 */
public void setSortOrder(SortOrder _sortOrder) {
    sortOrder = _sortOrder;
}
}

AppQuery是一个带有测试actionListener实现的ViewScoped组件:

public void actionListener(Long _idApplication){
System.out.println("Action listener - appId: " + _idApplication);
}

无论dataTable中的实际顺序是什么 - 当我点击第一行时,我总是得到appId:1,当第二个 - appId:2时。

如果对dataTable进行排序,如何从我点击的行中获取数据?

0 个答案:

没有答案