私のアプリケーション (RichFaces 4.1) には、extendedDataTable があり、バッキング Bean では、選択した行を追跡する必要があります。次のコードでこれを実現します。
JSF:
<rich:extendedDataTable id="freie"
selectionMode="multipleKeyboardFree"
selection="#{myBean.tableSelection}"
...
<a4j:ajax execute="@this" event="selectionchange"
listener="#{myBean.tableSelection}"
render="indicatorPanel" />
ジャワ:
UIExtendedDataTable dataTable= (UIExtendedDataTable) event.getComponent();
Object originalKey= dataTable.getRowKey();
_tableSelectedEntries.clear();
for (Object selectionKey: _tableSelection) {
dataTable.setRowKey(selectionKey);
if (dataTable.isRowAvailable()) {
_tableSelectedEntries.add((Entry) dataTable.getRowData());
}
}
dataTable.setRowKey(originalKey);
テーブルがフィルタリングされていない限り、これは正常に機能します。標準の RichFaces の方法を使用して、テーブルをフィルター処理します。
<rich:column sortBy="#{mitarbeiter.vorname}"
filterValue="#{mitarbeiterFilterBean.firstNameFilter}"
filterExpression="#{fn:containsIgnoreCase(mitarbeiter.vorname, mitarbeiterFilterBean.firstNameFilter)}">
テーブルがフィルタリングされ、たとえば最初の行を選択すると、バッキング Bean のフィルタリングされていないテーブルの最初の行の rowKey が取得されます。テーブルがフィルタリングされているときに、選択した行のrowDataを取得するにはどうすればよいですか?
私のコードは、ショーケースと同じように機能すると思います。