У меня есть таблица Vaadin, и я хочу, чтобы динамически добавлял строки.Динамическое добавление нескольких строк таблицы
Код, который я пробовал, работает нормально, и когда я нажимаю кнопку добавления строки, в таблице появляется новая строка. Проблема в том, что когда я нажимаю кнопку для второго, третьего и т. Д. Времени, в таблице не появляется новая строка. Я хотел бы добавить столько строк, сколько нажата кнопка. Как я могу прибить его?
Ниже приведен код, в котором создается таблица:
public Table createTable(BeanContainer beans) {
table.setContainerDataSource(beans);
table.setColumnHeader("PS_SECTION", "ID");
table.setColumnHeader("NAME", "SECTION");
table.setColumnHeader("VORDER","ORDER");
table.addGeneratedColumn("ACTIVE", new Table.ColumnGenerator() {
private static final long serialVersionUID = 1L;
@Override
public Object generateCell(final Table source, final Object itemId,
Object columnId) {
final CheckBox checkBox = new CheckBox("");
Set<Object> keys = itemIdToCheckbox.keySet();
for (Object key : keys) {
PS_SECTION PS = (PS_SECTION) sectionMap.get(key);
if (PS.getISACTIVE() == 1) {
CheckIt(key,true);
}
else if(PS.getISACTIVE() == 0){
CheckIt(key,false);
}
}
checkBox.addAttachListener(new AttachListener() {
@Override
public void attach(AttachEvent event) {
itemIdToCheckbox.put(itemId, checkBox);
tableToCheck.put(itemId, checkBox);
}
});
checkBox.addDetachListener(new DetachListener() {
@Override
public void detach(DetachEvent event) {
itemIdToCheckbox.remove(itemId);
tableToCheck.remove(itemId);
}
});
checkBox.addValueChangeListener(new Property.ValueChangeListener() {
@Override
public void valueChange(Property.ValueChangeEvent event) {
Boolean selected = (Boolean) event.getProperty().getValue();
}
});
return checkBox;
}
});
table.setMultiSelect(false);
table.setVisibleColumns(new Object[]{"PS_SECTION", "NAME", "VORDER", "ACTIVE"});
table.setEditable(true);
table.setSelectable(true);
table.setImmediate(true);
table.commit();
return table;
}
А вот код контейнера:
public BeanContainer createContainer() {
beans.setBeanIdProperty("PS_SECTION");
for (int i = 0; i < list.size(); i++) {
PS_SECTION section = list.get(i);
Long ps = section.getPS_SECTION();
String na = section.getNAME();
Long is = section.getISACTIVE();
Long isg = section.getISGLOBAL();
Long or = section.getVORDER();
Integer st = section.getSTATUS();
beanlist.add(new PS_SECTION(ps, na, is, isg, or, st));
}
beans.addAll(beanlist);
return beans;
}
Наконец, ряд Добавьте код кнопки:
addButton.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
Object newbean = beans.addBean(new PS_SECTION(0L, null, 0L, 0L, 0L, 0));
table.addItem(newbean);
}
});
Также попробовали следующее, чтобы избежать дублирования. То же самое произошло
long in = 200;
Object newbean = beans.addBean(new PS_SECTION(in, null, 0L, 0L, 0L, 0));
++in;
table.addItem(newbean);
Каков идентификатор newBean? Вероятно, у вас есть дубликаты ...) –
@ AndréSchild Идентификатор является первым длинным от beans. Я отредактировал свой вопрос сейчас, согласно вашему комментарию. То же самое произошло. Как вы думаете, что мне делать? – natso
Попробуйте вызвать table.refreshRowCache(); после того, как вы добавили свои товары. –