0
사용자가 선택 레코드를 삭제할 수 있도록 여러 행을 선택하고 있습니다. 이 줄은, 다중 선택 기능을 프런트 엔드에 시각적으로 잘 작동 -PrimeFaces DataTable : 널 (null)만을 제공하는 동적으로 빌드 된 테이블에 대해 (복수) 선택이 작동하지 않습니다.
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})));
- 여러 다음 PDF 문서 및 쇼케이스 연구소에 따르면, 그와 같은 자바로 변환 코드를 사용해야합니다.
- 선택 - # {dbeBean.selection}이 실제로 바인딩되고
public void setSelection(T[] selection)
만 호출됩니다. - rowKey - 호출 중이며 올바르게 작동하면
getIndexKey()
이 호출되고 필요한 결과를 반환합니다. - rowSelect -이 이벤트 핸들러도 호출됩니다 (
DbeBean.onRowSelect(SelectEvent e)
).
T[]
필요하지만, 그것은
List<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
}
...
그러나 핸들러는 예상대로 작동하지 않습니다. 이유 (2) DbeBean.setSelection(T[] selection)
& (4) DbeBean.onRowSelect(SelectEvent e)
을 null 값 : T[] selection = null
및 SelectEvent: e.getObject = null
각각 얻으십시오. 내가 도대체 뭘 잘못하고있는 겁니까?
미리 감사드립니다.
- PrimeFaces 3.2
- 인 Mojarra 2.1.7