列表框的 selectedItem 的 ZKoss 问题
ZKoss issue with selectedItem of listbox
这是我的代码:
<listbox id="boxFirma" multiple="true"
visible="@load(vm.opzioneSelezionata eq 'firma' ? 'true' : 'false')"
checkmark="true" width="400px" height="200px"
model="@bind(vm.opzioniFirma)"
selectedItems="@bind(vm.pickedItemSet)">
<template name="model" var="item"
status="s">
<listitem selected="@bind(item.preSelected)">
<listcell label="@bind(item.valore)" />
</listitem>
</template>
</listbox> <button label="Salva" style="margin-top:10px" disabled="@load(empty vm.pickedUser)"
onClick="@command('salvaPersonalizzazioneUtente')" />
问题是当我按下按钮 Salva 时,我只进入了 vm.pickedItemSet
用户刚刚选择的项目,但没有关于预选项目的信息 -> 'listitem selected="@bind(item.preSelected)" '
。因此,如果在视图模型上预选了 2 个项目并且用户单击了一个项目,那么我只会单击一个项目,而我想要所有三个项目。我该如何解决这个问题?
我认为您的问题出在使用域对象的 "preselected" 属性 之后。没有您的视图模型,很难理解您要实现的目标。
不过,让我试着对你说:
- 在init方法中填充集合(pickedItemset),让zk处理那个集合。
- 从您的模板中删除“ selected="@bind(item.preSelected)" ”。如果你喜欢
复选框,添加 "checkmark=true" 作为列表框 属性
(http://books.zkoss.org/wiki/ZK_Component_Reference/Data/Listbox#Multiple_Selection).
例如,试试这个视图模型("SignOption" 是一个具有单个成员值的 bean)。 "Salva" 按钮将打印出所选列表项的集合。
// a bunch of imports
public class MultiSelectionVM {
private String opzioneSelezionata = "firma";
private Set<SignOption> opzioniFirma = new HashSet<SignOption>();
private Set<SignOption> pickedItemSet = new HashSet<SignOption>();
private boolean pickedUser = true;
@Init
public void init(){
SignOption opt1 = new SignOption();
opt1.setValore("opt1");
SignOption opt2 = new SignOption();
opt2.setValore("opt2");
SignOption opt3 = new SignOption();
opt3.setValore("opt3");
//Init list model
opzioniFirma.add(opt1);
opzioniFirma.add(opt2);
opzioniFirma.add(opt3);
//Init selected Items
pickedItemSet.add(opt2);
}
@Command
public void salvaPersonalizzazioneUtente(){
System.out.println(pickedItemSet);
}
//Getters and setter for all members
}
希望对您有所帮助!
这是我的代码:
<listbox id="boxFirma" multiple="true"
visible="@load(vm.opzioneSelezionata eq 'firma' ? 'true' : 'false')"
checkmark="true" width="400px" height="200px"
model="@bind(vm.opzioniFirma)"
selectedItems="@bind(vm.pickedItemSet)">
<template name="model" var="item"
status="s">
<listitem selected="@bind(item.preSelected)">
<listcell label="@bind(item.valore)" />
</listitem>
</template>
</listbox> <button label="Salva" style="margin-top:10px" disabled="@load(empty vm.pickedUser)"
onClick="@command('salvaPersonalizzazioneUtente')" />
问题是当我按下按钮 Salva 时,我只进入了 vm.pickedItemSet
用户刚刚选择的项目,但没有关于预选项目的信息 -> 'listitem selected="@bind(item.preSelected)" '
。因此,如果在视图模型上预选了 2 个项目并且用户单击了一个项目,那么我只会单击一个项目,而我想要所有三个项目。我该如何解决这个问题?
我认为您的问题出在使用域对象的 "preselected" 属性 之后。没有您的视图模型,很难理解您要实现的目标。
不过,让我试着对你说:
- 在init方法中填充集合(pickedItemset),让zk处理那个集合。
- 从您的模板中删除“ selected="@bind(item.preSelected)" ”。如果你喜欢 复选框,添加 "checkmark=true" 作为列表框 属性 (http://books.zkoss.org/wiki/ZK_Component_Reference/Data/Listbox#Multiple_Selection).
例如,试试这个视图模型("SignOption" 是一个具有单个成员值的 bean)。 "Salva" 按钮将打印出所选列表项的集合。
// a bunch of imports
public class MultiSelectionVM {
private String opzioneSelezionata = "firma";
private Set<SignOption> opzioniFirma = new HashSet<SignOption>();
private Set<SignOption> pickedItemSet = new HashSet<SignOption>();
private boolean pickedUser = true;
@Init
public void init(){
SignOption opt1 = new SignOption();
opt1.setValore("opt1");
SignOption opt2 = new SignOption();
opt2.setValore("opt2");
SignOption opt3 = new SignOption();
opt3.setValore("opt3");
//Init list model
opzioniFirma.add(opt1);
opzioniFirma.add(opt2);
opzioniFirma.add(opt3);
//Init selected Items
pickedItemSet.add(opt2);
}
@Command
public void salvaPersonalizzazioneUtente(){
System.out.println(pickedItemSet);
}
//Getters and setter for all members
}
希望对您有所帮助!