Vaadin 7 Table with form fields inside createField() called repeatedly

I am using Vaadin 7.0.6 and I have a Table with mostly editable fields in the columns. I noted that my field factory is called repeatedly. For a small table, this is not much of an issue, but it gets worse if the table has lots of rows and columns of fields.

For example, if I just add a row (table.addItem()), I build the form fields twice in a row in response to the button click:

  1. Click to add a row (basically just does an table.addItem()):

TRACE: clearing my option list fields because seem to be starting fresh
TRACE: create field for itemId: 1; propertyId: label
TRACE: create field for itemId: 1; propertyId: value
TRACE: create field for itemId: 2; propertyId: label
TRACE: create field for itemId: 2; propertyId: value
TRACE: create field for itemId: 3; propertyId: label
TRACE: create field for itemId: 3; propertyId: value


	LibDropDownVersionForm$2.createField(Container, Object, Object, Component) line: 372	
	Table.getPropertyValue(Object, Object, Property) line: 3945	
	Table.parseItemIdToCells(Object[][]
, Object, int, int, RowHeaderMode, int, Object[], int, boolean[]
, HashSet<Property<?>>) line: 2308	
	Table.getVisibleCellsNoCache(int, int, boolean) line: 2147	
	Table.refreshRenderedCells() line: 1668	
	Table.refreshRowCache() line: 2613	
	Table.containerItemSetChange(Container$ItemSetChangeEvent) line: 4401	
	IndexedContainer(AbstractContainer).fireItemSetChange(Container$ItemSetChangeEvent) line: 242	
	IndexedContainer.fireItemAdded(int, Object, Item) line: 624	
	IndexedContainer.addItem(Object) line: 273	
	Table.addItem(Object[], Object) line: 2575	
	LibDropDownVersionForm.buttonClick(Button$ClickEvent) line: 132	
  1. But then it does it again:

TRACE: clearing my option list fields because seem to be starting fresh
TRACE: create field for itemId: 1; propertyId: label
TRACE: create field for itemId: 1; propertyId: value
TRACE: create field for itemId: 2; propertyId: label
TRACE: create field for itemId: 2; propertyId: value
TRACE: create field for itemId: 3; propertyId: label
TRACE: create field for itemId: 3; propertyId: value


	LibDropDownVersionForm$2.createField(Container, Object, Object, Component) line: 372	
	Table.getPropertyValue(Object, Object, Property) line: 3945	
	Table.parseItemIdToCells(Object[][]
, Object, int, int, RowHeaderMode, int, Object[], int, boolean[]
, HashSet<Property<?>>) line: 2308	
	Table.getVisibleCellsNoCache(int, int, boolean) line: 2147	
	Table.refreshRenderedCells() line: 1668	
	Table.refreshRowCache() line: 2613	
	Table.valueChange(Property$ValueChangeEvent) line: 4102	
	IndexedContainer.firePropertyValueChange(IndexedContainer$IndexedContainerProperty) line: 599	
	IndexedContainer.access$1000(IndexedContainer, IndexedContainer$IndexedContainerProperty) line: 63	
	IndexedContainer$IndexedContainerProperty<T>.setValue(Object) line: 953	
	Table.addItem(Object[], Object) line: 2583	
	LibDropDownVersionForm.buttonClick(Button$ClickEvent) line: 132	

======================================================

But it can sometimes do it even more times, like dragging a row and dropping it elsewhere inside the same Table builds the form fields 3 times:

  1. Dragged row 2 above row 1
    TRACE: clearing my option list fields because seem to be starting fresh
    TRACE: create field for itemId: 1; propertyId: label
    TRACE: create field for itemId: 1; propertyId: value
    TRACE: create field for itemId: 3; propertyId: label
    TRACE: create field for itemId: 3; propertyId: value

	LibDropDownVersionForm$2.createField(Container, Object, Object, Component) line: 372	
	Table.getPropertyValue(Object, Object, Property) line: 3945	
	Table.parseItemIdToCells(Object[][]
, Object, int, int, RowHeaderMode, int, Object[], int, boolean[]
, HashSet<Property<?>>) line: 2308	
	Table.getVisibleCellsNoCache(int, int, boolean) line: 2147	
	Table.refreshRenderedCells() line: 1668	
	Table.refreshRowCache() line: 2613	
	Table.containerItemSetChange(Container$ItemSetChangeEvent) line: 4401	
	IndexedContainer(AbstractContainer).fireItemSetChange(Container$ItemSetChangeEvent) line: 242	
	IndexedContainer.fireItemSetChange() line: 631	
	IndexedContainer(AbstractInMemoryContainer<ITEMIDTYPE,PROPERTYIDCLASS,ITEMCLASS>).fireItemRemoved(int, Object) line: 911	
	IndexedContainer.removeItem(Object) line: 312	
	Table(AbstractSelect).removeItem(Object) line: 891	
	Table.removeItem(Object) line: 4167	
	LibDropDownVersionForm$3.drop(DragAndDropEvent) line: 414	
	DragAndDropService.handleDropRequest(DropTarget, Map<String,Object>) line: 117	
	DragAndDropService.changeVariables(Object, Map<String,Object>) line: 83	
  1. Then it rebuilds again:

TRACE: clearing my option list fields because seem to be starting fresh
TRACE: create field for itemId: 1; propertyId: label
TRACE: create field for itemId: 1; propertyId: value
TRACE: create field for itemId: 3; propertyId: label
TRACE: create field for itemId: 3; propertyId: value


	LibDropDownVersionForm$2.createField(Container, Object, Object, Component) line: 372	
	Table.getPropertyValue(Object, Object, Property) line: 3945	
	Table.parseItemIdToCells(Object[][]
, Object, int, int, RowHeaderMode, int, Object[], int, boolean[]
, HashSet<Property<?>>) line: 2308	
	Table.getVisibleCellsNoCache(int, int, boolean) line: 2147	
	Table.refreshRenderedCells() line: 1668	
	Table.refreshRowCache() line: 2613	
	Table.containerItemSetChange(Container$ItemSetChangeEvent) line: 4401	
	IndexedContainer(AbstractContainer).fireItemSetChange(Container$ItemSetChangeEvent) line: 242	
	IndexedContainer.fireItemAdded(int, Object, Item) line: 624	
	IndexedContainer(AbstractInMemoryContainer<ITEMIDTYPE,PROPERTYIDCLASS,ITEMCLASS>).internalAddItemAfter(ITEMIDTYPE, ITEMIDTYPE, ITEMCLASS, boolean) line: 823	
	IndexedContainer.addItemAfter(Object, Object) line: 362	
	Table.addItemAfter(Object, Object) line: 4559	
	LibDropDownVersionForm$3.drop(DragAndDropEvent) line: 419	
	DragAndDropService.handleDropRequest(DropTarget, Map<String,Object>) line: 117	
	DragAndDropService.changeVariables(Object, Map<String,Object>) line: 83	
  1. Then it rebuilds again:

TRACE: clearing my option list fields because seem to be starting fresh
TRACE: create field for itemId: 1; propertyId: label
TRACE: create field for itemId: 1; propertyId: value


	LibDropDownVersionForm$2.createField(Container, Object, Object, Component) line: 372	
	Table.getPropertyValue(Object, Object, Property) line: 3945	
	Table.parseItemIdToCells(Object[][]
, Object, int, int, RowHeaderMode, int, Object[], int, boolean[]
, HashSet<Property<?>>) line: 2308	
	Table.getVisibleCellsNoCache(int, int, boolean) line: 2147	
	Table.refreshRenderedCells() line: 1668	
	Table.refreshRowCache() line: 2613	
	Table.valueChange(Property$ValueChangeEvent) line: 4102	
	IndexedContainer.firePropertyValueChange(IndexedContainer$IndexedContainerProperty) line: 599	
	IndexedContainer.access$1000(IndexedContainer, IndexedContainer$IndexedContainerProperty) line: 63	
	IndexedContainer$IndexedContainerProperty<T>.setValue(Object) line: 953	
	LibDropDownVersionForm$3.drop(DragAndDropEvent) line: 421	
	DragAndDropService.handleDropRequest(DropTarget, Map<String,Object>) line: 117	
	DragAndDropService.changeVariables(Object, Map<String,Object>) line: 83