Я хочу добавить сортировку для столбца в таблицу сотовых с помощью ListHandler. Но он не сортирует. Я не понимаю, почему это не работает. Мой код основан на учебнике GWT. Пожалуйста, предложите мне что-нибудь.Столбец в таблице gwt celltable не сортируется
Contract.java
public class Contract implements Serializable {
private int contId;
private String contOrgName;
//getters and setters...
}
Main.java
TextColumn<Contract> orgNameColumn = new TextColumn<Contract>() {
@Override
public String getValue(Contract contract) {
return contract.getcontOrgName();
}};
orgNameColumn.setSortable(true);
CellTable<Contract> tableContract = new CellTable<Contract>();
tableContract.addColumn(orgNameColumn, "OrgName");
ListDataProvider<Contract> contractDataProvider = new ListDataProvider<Contract>();
contractDataProvider.addDataDisplay(tableContract);
GetContractsServiceAsync getContractsService = GWT.create(GetContractsService.class);
getContractsService.getContracts(new AsyncCallback<List<Contract>>() {
public void onFailure(Throwable caught) {
// Show the RPC error message to the user
}
public void onSuccess(List<Contract> result) {
contractDataProvider.getList().clear();
contractDataProvider.getList().addAll(result);
ListHandler<Contract> columnSortHandler = new ListHandler<Contract>(result);
columnSortHandler.setComparator(orgNameColumn, new Comparator<Contract>() {
public int compare(Contract o1, Contract o2) {
if (o1 == o2) {
return 0;
}
if (o1 != null) {
return (o2 != null) ? o1.getcontOrgName().compareTo(o2.getcontOrgName()) : 1;
}
return -1;
}
});
tableContract.addColumnSortHandler(columnSortHandler);
table.getColumnSortList().push(orgNameColumn);
}
});
Похоже, ссылка на объект идентификатора является правильным и ListDataProvider имеет правильные данные. Я зарегистрировал ListHandler перед добавлением столбца в CellTable, но это не помогло. У меня есть подозрение, что мой компаратор не работает. Я поставил точки останова для отладчика в строках 'return 0',' return (o2! = Null)? o1.getcontOrgName(). compareTo (o2.getcontOrgName()): 1; ',' return -1; 'и я видел, что они не вызывали. Может быть, проблема в этом компараторе. – zigfridus
Я заменил 'result' на' contractDataProvider.getList() 'в' ListHandler columnSortHandler = новый ListHandler (contractDataProvider.getList()); 'и это помогло. Большое спасибо! –
zigfridus
Рад помочь !!! – PVR