Search code examples
sortinggwtcelltable

Column in gwt celltable doesn't sort


I want to add sorting for column in celltable with help of ListHandler. But it doesn't sort. I don't understand why it doesn't work. My code is based on GWT tutorial. Please suggest me something.

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);
}
});

Solution

  • Hey I was also facing the same issue a long back..Then I got to know that the object reference id is different than the one I have added into table. Once i got the reason it was very easy to find the solution. Also please register your ListHandler before adding column to CellTable.

    Note the edit for your comment :

    There is nothing wrong with the comparator. The problem is still same. It reflects the wrong the object in comparator compared to in CellTable.

    Please try replace the code as below :

    contractDataProvider.getList().addAll(result);    
    ListHandler<Contract> columnSortHandler = new ListHandler<Contract>(contractDataProvider.getList());