複数行の選択を使用して、選択しているレコードをユーザーが削除できるようにしています。PDFドキュメントとShowCaseLabsによると、Javaに変換されたコードを次のように使用する必要があります。
final DataTable = new DataTable();
...
// (1)
dataTable.setSelectionMode("multiple");
// (2)
dataTable.setValueExpression("selection", createValueExpression(DbeBean.class, "selection", Object[].class));
// (3)
dataTable.setValueExpression("rowKey", createValueExpression("#{" + VARIABLE + ".indexKey}", Object.class));
...
final ClientBehaviorHolder dataTableAsHolder = dataTable;
...
// (4)
dataTableAsHolder.addClientBehavior("rowSelect", createAjaxBehavior(createMethodExpression(metaData.controllerBeanType, "onRowSelect", void.class, new Class<?>[] {SelectEvent.class})));
- 複数-この行は複数選択を特徴としており、フロントエンドで視覚的に正常に機能します。
- selection-呼び出されると、#{dbeBean.selection}は実際にバインドされ、
public void setSelection(T[] selection)
が呼び出されるだけです。 - rowKey-呼び出されて正常に動作し、
getIndexKey()
が呼び出されて必要な結果を返します。 - rowSelect-このイベントハンドラーも呼び出されます
DbeBean.onRowSelect(SelectEvent e)
。
List<T>
私も怠惰なデータモデルを使用しています(それが理由かもしれないとは本当に信じていませんが、誰が知っていますT[]
か?
public abstract class AbstractLazyDataSource<T extends IIndexable<K>, K> extends LazyDataModel<T> {
...
@Override
public final List<T> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
...
final IResultContainer<T> resultContainer = getData(querySpecifier);
final List<T> data = resultContainer.getData();
setRowCount(resultContainer.getTotalEntitiesCount());
return getPage(data, first, pageSize);
}
...
@Override
public final K getRowKey(T object) {
return object.getIndexKey(); // T instanceof IIndexable<K>, have to return a unique ID
}
...
ただし、ハンドラーは期待どおりに機能しません。DbeBean.setSelection(T[] selection)
(2)と(4)がそれぞれnull値:と、をDbeBean.onRowSelect(SelectEvent e)
取得する理由を理解するのを手伝ってください。私は何が間違っているのですか?T[] selection = null
SelectEvent: e.getObject = null
前もって感謝します。
- PrimeFaces 3.2
- クロサギ2.1.7