Search code examples
javagwtgxt

StringFilter override not working


I'm trying to override the behavior of a StringFilter used by a Grid . The code below doesn't have some functionality, I just want to see if validateModel is being called. The thing is, it is not being called ever. On the other hand onFieldKeyUp is being called as it should. What am I doing wrong?

I'm using Sencha GXT 3.1.0 , GWT 2.6.1 , Java 1.7

Filter<Record, ?> filter = new StringFilter<Record>(valueProvider)
{
    @Override
    protected void onFieldKeyUp(Event event) 
    {
        Window.alert("onFieldKeyUp");   //--> This is called
        int key = event.getKeyCode();
        if (key == KeyCodes.KEY_ENTER && field.isValid()) 
        {
            event.stopPropagation();
            event.preventDefault();
            menu.hide(true);

            return;
        }

        super.onFieldKeyUp(event);
    }

    @Override
    protected boolean validateModel(Record model) 
    {
        Window.alert("validateModel");   //--> This is NOT called
        String rowValue = getValueProvider().getValue(model);
        rowValue = (rowValue == null) ? "" : rowValue;
        Object filterObject = getValue();
        String filterValue = filterObject == null ? "" : String.valueOf(filterObject);

        if (filterValue.isEmpty() && rowValue.isEmpty()) 
        {
            return true;
        } 
        else 
        {
            //Here I want to put some more code manipulating the filtevalue
            return rowValue.toLowerCase().indexOf(filterValue.toLowerCase()) > -1;
        }
    }
};      

Solution

  • Did you put the filters.setLocal(true); and filters.initPlugin(grid);?

    Here is the code I tried and worked:

    GridFilters<MyRow> filters = new GridFilters<MyRow>();
    
    filters.initPlugin(grid);
    
    StringFilter<MyRow> filter = new StringFilter<MyRow>(nameValueProvider) {
      @Override
      protected boolean validateModel(MyRow model) {
        Window.alert("Hello");
        return super.validateModel(model);
      }
    };
    
    filters.addFilter(filter);
    filters.setLocal(true);