嗨,大家好,我是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);
方法时,出现以下错误。2013年3月2日下午4:30:41 org.zkoss.zk.ui.impl.UiEngineImpl
handleError:1280严重:>> 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)
最佳答案
如果您使用的是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' />
在这里我将复选框值与此变量绑定
checkboxValue
任何人都单击复选框,我正在调用方法
复选框
在这里我可以执行我的业务逻辑
关于java - 包含空数据和源文件的ListModel中的ZK NullPointerException:内联评估:``,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14677361/