0

複数行の選択を使用して、選択しているレコードをユーザーが削除できるようにしています。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})));
  1. 複数-この行は複数選択を特徴としており、フロントエンドで視覚的に正常に機能します。
  2. selection-呼び出されると、#{dbeBean.selection}は実際にバインドされ、public void setSelection(T[] selection)が呼び出されるだけです。
  3. rowKey-呼び出されて正常に動作し、getIndexKey()が呼び出されて必要な結果を返します。
  4. 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 = nullSelectEvent: e.getObject = null

前もって感謝します。

  • PrimeFaces 3.2
  • クロサギ2.1.7
4

1 に答える 1

1

私はそれを機能させました:rowKey動的p:dataTable作成(DataTable)中にプロパティを削除し、単にgetRowData遅延データモデルでオーバーロードしました。今では動作します。

于 2012-08-01T10:46:19.333 に答える