0

嗨,伙计们,我对 ZK 很陌生,我收到 2 个错误,如果出现此错误,请指导我,抱歉,对于非新手来说非常容易。这是代码。

public void createItem(Listbox list) 
{          
    BindingListModelList model=(BindingListModelList)list.getModel();       
    System.out.println((list==null));//prints false
    System.out.println((model==null));//prints true             
    if(model==null){ list.setModel(new ListModelList());System.out.println("After Set New Model: "+(list.getModel()==null));//prints true}      
    model=(BindingListModelList)list.getModel();
    System.out.println((model==null));//prints true
    model.add(getMeridaManager().createNewMeridaItem(list));//throws NPE
}   

public void loadGrid(Listbox list)
{
    //here i load the model but when is a empty ALL arrayList throws exception on createItem(Listbox list) 

    java.util.List<DianaMerida>all = meridaManager.getAllMeridas();
    BindingListModelList rl=new BindingListModelList(all,false);        
    list.setModel(rl);
}

如果 .zul 当我使用过去的代码时。我想知道是否是一个空集合,我如何通过示例将新项目添加到模型中,稍后再添加新记录。

2个问题我在zul中有以下代码。

checkbox id="isclosecheckbox" checked="@{d.c03}"     onCheck="myClass.checkBoxListener2(datebox1);"
datebox id="datebox1" cols="10" format="short" mold="rounded"

但是当单击复选框并myClass.checkBoxListener2(datebox1);调用该方法时,我收到以下错误。

03/02/2013 04:30:41 PM org.zkoss.zk.ui.impl.UiEngineImpl handleError:1280 GRAVE: >>org.zkoss.zk.ui.UiException: 源文件: 内联评估: . . . '' : Undefined argument: datebox1 : at Line: 300 : in file: inline evaluation of:
. . . '' : ( datebox1 )

源文件:内联评估:. . . '' : Undefined argument: datebox1 : at Line: 300 : in file: inline evaluation of:
. . . '' : ( datebox1 )

4

1 回答 1

1

如果您使用的是 MVVM 架构,您可以像这样在列表框中添加一个新项目。

    <?page title="new page title" contentType="text/html;charset=UTF-8"?>
<zk>
    <window title="new page title" border="normal"
        viewModel="@id('vm') @init('com.team.MyListbox')" apply="org.zkoss.bind.BindComposer">
        <button label="AddItem" onClick="@command('addNewItem')"></button>
        <listbox model="@bind(vm.dataList)">
            <listhead>
                <listheader value="A"></listheader>
                <listheader value="B"></listheader>
                <listheader value="C"></listheader>

            </listhead>
            <template name="model" var="mymodel">
                <listitem>
                    <listcell>

                        <textbox value="@bind(mymodel.a)" />
                    </listcell>
                    <listcell>
                        <label value="@bind(mymodel.b)" />

                    </listcell>
                    <listcell>
                        <label value="@bind(mymodel.c)" />

                    </listcell>
                </listitem>
            </template>
        </listbox>
    </window>
</zk>

而 Java 代码或 ViewModel 是...

package com.team;

import java.util.ArrayList;
import java.util.List;

import org.zkoss.bind.annotation.AfterCompose;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.ContextParam;
import org.zkoss.bind.annotation.ContextType;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.Component;

public class MyListbox {

    private List<Data> dataList;

    @AfterCompose
    public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {
        try {
            dataList = new ArrayList<Data>();
            Data data;
            data = new Data("a1", "b1", "c1");
            dataList.add(data);
            data = new Data("a2", "b2", "c2");
            dataList.add(data);
            data = new Data("a3", "b3", "c3");
            dataList.add(data);
        } catch (Exception e) {

        }
    }

    @Command
    @NotifyChange("dataList")
    public void addNewItem(){
        Data data = new Data("", "", "");
        dataList.add(data);
    }
    public List<Data> getDataList() {
        return dataList;
    }

    public void setDataList(List<Data> dataList) {
        this.dataList = dataList;
    }

    public class Data {
        String a;
        String b;
        String c;
        public String getA() {
            return a;
        }
        public String getB() {
            return b;
        }
        public String getC() {
            return c;
        }
        public void setA(String a) {
            this.a = a;
        }
        public void setB(String b) {
            this.b = b;
        }
        public void setC(String c) {
            this.c = c;
        }
        public Data(String a, String b, String c) {
            super();
            this.a = a;
            this.b = b;
            this.c = c;
        }

    }
}

对于您的复选框问题,您可以在 zul 中使用类似这样的代码..

<checkbox checked="@bind(vm.checkboxValue)" onCheck="@command('checkboxClicked'  />

在这里,我将复选框值与此变量绑定

复选框值

任何人都点击我正在调用方法的复选框

复选框单击

我可以在哪里执行我的业务逻辑

于 2013-02-04T06:02:39.540 回答