具有空数据和源文件的ListModel中的ZK NullPointerException:内联评估:``

时间:2013-02-03 21:11:58

标签: java listbox zk

嗨伙计们我是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"

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

  

03/02/2013 04:30:41 PM org.zkoss.zk.ui.impl.UiEngineImpl   handleError:1280 GRAVE:&gt;&gt; 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)

    
  

1 个答案:

答案 0 :(得分: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 Code或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;
        }

    }
}

对于你的复选框问题,你可以使用像这样的代码..

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

这里我将复选框值绑定到此变量

  

checkboxValue

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

  

checkboxClicked

我可以执行我的业务逻辑