我遇到了列表框和組合框行爲的問題。我有一個包含一組行的列表框,我嘗試內聯編輯並根據組合框的值更改字段的值。但是當我在一行的組合中選擇一個值時,其他行的組合框的所有值都變爲相同的值。請讓我知道我做錯了什麼。謝謝你的幫助!ZK ComboBox onchange更改列表框中的所有組合框
這裏是我的代碼:
<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();
}
嗨Nabil A.感謝您的回答!這可能是原因。你知道任何避免它的方法嗎?我是否必須爲每一行設置一個新模型? – jherranzm
讓'getListaPrecioEspecial()'返回一個List(?)的副本。但請注意,Java沒有深刻的克隆/複製!因此,如果列表中的對象不是來自支持深度克隆的框架,那麼您不能簡單地創建新實例,也不想實現自己的克隆,如果數據結構不是太複雜,我推薦使用克隆可以使用[this](http://code.google.com/p/cloning/)。如果你這樣做,請閱讀網站上的說明。 –
感謝納比爾A.您的評論。我會盡力讓你知道。數據結構是一個帶有幾個字符串的List,每個頁面大概有十個組合,所以我認爲它不會是一個大數據負載。再次感謝! – jherranzm