我遇到了列表框和组合框行为的问题。我有一个包含一组行的列表框,我尝试编辑内联并根据组合框的值更改字段的值。但是当我在一行的组合中选择一个值时,其他行的组合框的所有值都会更改为相同的值。请让我知道我做错了什么。谢谢你的帮助!
这是我的代码:
<template name="model" var="item">
<listitem >
<listcell label="@load(item.id)"/>
<listcell label="@load(item.descCodigoTrafico)"/>
<listcell label="@load(item.descAmbitoDeTrafico)"/>
<listcell>
<combobox
model="@load(vm.listaPrecioEspecial)"
onChange="@command('addToUpdate', entry=item)"
selectedItem="@load(item.precioEspecial) @save(item.precioEspecial, before='updateItems')">
<template name="model" var="el">
<comboitem label="@load(el)"/>
</template>
</combobox>
</listcell>
<listcell label="@load(item.tipoDescuento)" />
<listcell>
<decimalbox inplace="true"
value="@load(item.ppm) @save(item.ppm, before='updateItems')"
onChange="@command('addToUpdate', entry=item)"
format="#.0000"/>
</listcell>
</listitem>
</template>
de VM中两种方法的代码:
@Command
public void addToUpdate(@BindingParam("entry") TblEscenarioCondTrafico item){
itemsToUpdate.add(item);
LOGGER.info(item.toString());
for(TblEscenarioCondTrafico i : itemsToUpdate){
LOGGER.info("Item a guardar " + i.toString());
//LOGGER.info("Elemento...");
}
}
@NotifyChange("listaTraficos")
@Command
public void updateItems() throws Exception{
EscenarioCondTraficoService ects = new EscenarioCondTraficoService(em);
for (TblEscenarioCondTrafico i : itemsToUpdate){
LOGGER.info("Guardando " + i.toString());
ects.save(i);
}
itemsToUpdate.clear();
listaTraficos = getListaTraficos();
}
答案 0 :(得分:1)
问题应该是
model="@load(vm.listaPrecioEspecial)"
将Collection
设置为每个Combobox
作为其模型,因此它绑定到所有Combobox
个实例。
答案 1 :(得分:0)
我有同样的问题,比如Nabil A.说问题是模型,所有项目都是一样的。我解决了为每个项目创建新模型的问题。 而不是:
model="@load(vm.listaPrecioEspecial)"
我说的是:
model="@load(vm.getNewListaPrecioEspecial())
在VM类中,您必须创建一个名为getNewListaPrecioEspecial的方法,该方法返回一个新列表。 (在我的例子中是一个新的SortingPagingListModel)