【发布时间】:2014-02-27 09:42:28
【问题描述】:
我对 zk 应用程序有很大(对我来说)问题。我想将模型绑定到视图,但它不起作用。当我尝试访问模型中的小程序时,我收到错误 java.lang.NullPointer
//index.zul
<?page title="Auto Generated index.zul"?>
<window id="mainWindow" title="edycja dokumentow" border="normal"
apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('controller.EditDocsController')">
<vbox>
<listbox id="modelList" height="160px" model="@bind(vm.modelList)">
<listhead>
<listheader label="id" />
<listheader label="open" />
</listhead>
<template name="model">
<listitem>
<listcell label="@bind(each)" />
<listcell >
<button label="otworz" onClick="@command('open',id=each)"/>
</listcell>
</listitem>
</template>
</listbox>
<applet code="applet.EditFileApplet" codebase="applet" archive="EditApplet.jar" width="100px" height="100px" model="@save(vm.editApplet) before='open'"/>
<!--<applet code="applet.EditFileApplet" codebase="applet" archive="EditApplet.jar" width="100px" height="100px" model="@bind(vm.editApplet)'"/>
// I have tried these two version separetly
</vbox>
</window>
EditDocsController.java
public class EditDocsController {
private DocsDAO docksDAO = new DocsDAO();
private List<Integer> modelList;
private Applet editApplet;
public Applet getEditApplet() { return editApplet; }
public void setEditApplet(Applet editApplet) { this.editApplet = editApplet; }
public List<Integer> getModelList() { return modelList; }
public void setModelList(List<Integer> modelList) { this.modelList = modelList; }
@AfterCompose
public void loadDock(){
modelList = docksDAO.getData();
/* editApplet = new Applet();
editApplet.setCode("applet.EditFileApplet");
editApplet.setCodebase("applet");
editApplet.setArchive("EditApplet.jar");*/
}
@Command
public void open(@BindingParam("id") Integer id){
editApplet.getArchive();
editApplet.invoke("open", new String[]{id.toString(),"user jakiś tam"} );
}
}
提前致谢, 如果您知道如何修复它,请与我分享
这里是所有堆栈跟踪https://docs.google.com/document/d/1YZs7xgzxbOGo70sPogUdNn5IbwWGcq2YU1GRszEtdNk/edit?usp=sharing
这是它的一部分,对我来说它是最有价值的
lut 28, 2014 1:19:56 PM org.zkoss.bind.impl.ParamCall call
SEVERE:
java.lang.NullPointerException
at controller.EditDocsController.open(EditDocsController.java:51) // the line editApplet.getArchive()
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
lut 28, 2014 1:19:56 PM org.zkoss.bind.impl.BinderImpl$CommandEventListener onEvent
SEVERE: null
java.lang.NullPointerException
at controller.EditDocsController.open(EditDocsController.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
lut 28, 2014 1:19:56 PM org.zkoss.zk.ui.impl.UiEngineImpl handleError
SEVERE:
java.lang.NullPointerException
at controller.EditDocsController.open(EditDocsController.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
lut 28, 2014 1:21:21 PM org.zkoss.bind.impl.BinderImpl addPropertySaveBindings0
WARNING: component <Applet xLDQ7#myEditApplet> doesn't has event to save attribute model at [file:/C:/Users/bbur/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/RPO/index.zul, line:30]
我已经对代码进行了一些更改以应对问题,但仍然存在问题。我用它来初始化小程序
<applet id="myEditApplet" code="applet.EditFileApplet" codebase="applet" archive="EditApplet.jar" width="30px" height="30px" style="border: 1px" />
将按钮定义更改为
<button label="otworz" onClick='myEditApplet.invoke("openDoc","1234")'/>
我删除了从 EditDocsController 中打开的方法
当我单击“otworz”按钮时,出现错误“无法调用小程序的方法:openDoc 未定义”尽管该方法存在于小程序类 (public void openDoc(String idDoc)) 中。最烦人的是,当我调用 'myEditApplet.invoke("init")' 时,一切都很好
【问题讨论】:
-
请显示异常的完整堆栈跟踪。
-
请不要发布附加信息作为答案。你可以而且应该编辑你的问题来做到这一点。
标签: java data-binding nullpointerexception applet zk