rich:dataTableコンポーネント(RF 4.2.2.Final)があります。テーブルのrowclickリスナーを追加して、行の選択に基づいて詳細ビューを更新しました。すべてが正常に機能していました。しかし今、私は自分のdataTableにソート可能なヘッダーを持たせようとしています。RFショーケースをたどると、dataTableのデータが自然な順序ではない場合、つまりデータがappQueryBeanのリストにある順序である場合、行の選択が正しく機能しないことがわかります。しかし、RF3.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が取得され、2番目の行はappId:2になります。
dataTableが並べ替えられている場合、クリックした行からデータを取得するにはどうすればよいですか?