列表框的 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" 属性 之后。没有您的视图模型,很难理解您要实现的目标。

不过,让我试着对你说:

例如,试试这个视图模型("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
}

希望对您有所帮助!