java.lang.IllegalArgumentException: Ids must exist in the Container or as a

vaadin version: 6.8.10
when bean item name “itemValue”, then table report exception:
java.lang.IllegalArgumentException: Ids must exist in the Container or as a generated column , missing id: itemValue

is it “itemValue” reserved word? when i chang itemValue to other like itemCoin,then exception gone.

test code:
public class CoinItemDef implements Serializable {
private static final long serialVersionUID = 7184246484415024592L;

    private Integer itemValue = null;
    private Integer percent = null;

    public Integer getItemValue() {
        return itemValue;
    }

    public void setItemValue(Integer itemValue) {
        this.itemValue = itemValue;
    }

    public Integer getPercent() {
        return percent;
    }

    public void setPercent(Integer percent) {
        this.percent = percent;
    }
}

private BeanItemContainer coinItemContainer = new BeanItemContainer(CoinItemDef.class);

Table tblCoinItem = new Table();
tblCoinItem.setContainerDataSource(coinItemContainer);
tblCoinItem.setMultiSelect(false);
tblCoinItem.setSelectable(true);
tblCoinItem.setEditable(true);
tblCoinItem.setPageLength(5);
tblCoinItem.setWidth("100%");
tblCoinItem.setVisibleColumns(new Object[] {"itemValue", "percent"});
tblCoinItem.setColumnHeader("itemValue", "item coin");
tblCoinItem.setColumnHeader("percent", "item percent");

There should not exist any reserved property names. I haven’t at least heard of anything like that before. Does it show the column if you remove the last three lines?

Also not that BeanItemContainer checks the available getters and setters and not the field. For example it can’t read the itemValue property as it is private, but it does find the getItemValue() -method, and decides that the name of the value that it gets from that method should be itemValue. Not really relevant info as you don’t have any typos in the getter either, but a good thing to know when debugging something like this.