0

I have created a custom cell that determines whether to display a SelectionCell or TextCell. In the case of a SelectionCell render, I am unable to get the setFieldUpdater method to fire.

Code below...

private class CustomTypeCell extends AbstractCell<String>
{
    SelectionCell selectCell = new SelectionCell(cardMnemonics);
    TextCell textCell = new TextCell();

    @Override
    public void render(
            Context context,
            String value, SafeHtmlBuilder sb)
    {
        if (value != null)
        {
            textCell.render(context, value, sb);
        }
        else
        {
            selectCell.render(context, "", sb);
        }

    }
}


    private class CustomTypeColumn extends Column<Object, String>
{

    public CustomTypeColumn(CustomTypeCell cell)
    {
        super(cell);
    }

    @Override
    public String getValue(Object object)
    {
        return object.getStringValue();
    }
}

Implemented using...

CustomTypeCell cell = new CustomTypeCell();
CustomTypeColumn customCol = new CustomTypeColumn(cell);

customCol.setFieldUpdater(new FieldUpdater<Object, String>()
    {
        public void update(int index, Object object, String value)
        {
            object.setStringValue(value);
            // perform action           }
    });
cellTable.addColumn(customCol, "Custom Column");

This works fine if i use a standard Column with SelectionCell.

prayagupa
  • 30,204
  • 14
  • 155
  • 192

1 Answers1

0

Rendering is not enough, you also want to delegate the event handling to the appropriate cell implementation: add your if/else construct into onBrowserEvent, and make sure you listen for the appropriate events in getConsumedEvents.
You should probably also implement resetFocus.

You'll probably find inspiration in the CompositeCell code.

Thomas Broyer
  • 64,353
  • 7
  • 91
  • 164
  • Thanks, after adding the getConsumedEvents and onBrowserEvent the setFieldUpdater method is called after changing the SelectionCell value. – user1635484 Aug 30 '12 at 14:00