EventQueue.subscribe
ページを更新した後、メソッドからモデルを設定できません。
.zul
メイン ファイルとインクルードファイルの 2 つのページがあり.zul
ます。zul ごとに個別のコントローラーがあります。ユーザーが含まれているページをクリックしてlistbox
顧客オブジェクトを渡すと、含まれているページのコントローラーからイベントを発行します。
eq = EventQueues.lookup("CLIENTS", EventQueues.DESKTOP, true);
eq.publish(new Event("onClick", null, customer));
メイン.zul
ページのコントローラで、イベントを受け取り、顧客オブジェクトを取得します。次に、その ID に基づいて、メインlistbox
に対応するデータを提供します。
eq = EventQueues.lookup("CLIENTS", EventQueues.DESKTOP, true);
eq.subscribe(new EventListener() {
public void onEvent(Event event) throws Exception {
if (!Executions.getCurrent().getDesktop().isAlive()) {
eq.unsubscribe(this);
return;
}
Customer customer = (Customer) event.getData();
if (customer != null){
id = customer.getId();// Need to identify what data to retrieve from database
crm_div.setVisible(false); // Listbox from included page
dataListbox.setVisible(true); // Listbox on main page
dataListbox.setModel(new DataListboxModel());// Go to database and extract relevant data
}
else{
alert("No client");
}
}
});
初めて、それはうまくいきます。イベントを受け取り、オブジェクトを取得し、リストボックスにモデルを正常に提供します。ただし、別のページに移動して戻ると、NullPointerException が発生します。ログ ファイルで、セッションは同じで、ページは破棄されていますが、デスクトップは生きていることに気付きました。ZK 5.0.10 を使用しています。
で
org.zkoss.zk.ui.AbstractComponent.getAttachedUiEngine(AbstractComponent.java:387) at org.zkoss.zk.ui.AbstractComponent.smartUpdate(AbstractComponent.java:1487) at org.zkoss.zk.ui.AbstractComponent.smartUpdate( AbstractComponent.java:1462) org.zkoss.zk.ui.AbstractComponent.smartUpdate(AbstractComponent.java:1495) org.zkoss.zul.Listbox.resetDataLoader(Listbox.java:2982) org.zkoss.zul.Listbox .setModel(Listbox.java:2377) で com.is.sdbooks.controller.ComposerTest.refreshModel(ComposerTest.java:169) で com.is.sdbooks.controller.ComposerTest.onDoubleClick$dataGrid(ComposerTest.java:180) でsun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) で sun.reflect.NativeMethodAccessorImpl.invoke(未知のソース) で sun.reflect.DelegatingMethodAccessorImpl.invoke(未知のソース) で java.lang.reflect.Method.invoke(未知のソース) でorg.zkoss.zk.ui.event.GenericEventListener.onEvent(GenericEventListener.java:81) org.zkoss.zk.ui.impl.EventProcessor.process0(EventProcessor.java:192) org.zkoss.zk.ui.impl.EventProcessor.process( EventProcessor.java:138) org.zkoss.zk.ui.event.Events.sendEvent(Events.java:306) org.zkoss.zk.ui.event.Events.sendEvent(Events.java:329) org .zkoss.zk.ui.AbstractComponent$ForwardListener.onEvent(AbstractComponent.java:3052) at org.zkoss.zk.ui.impl.EventProcessor.process0(EventProcessor.java:192) at org.zkoss.zk.ui.impl org.zkoss.zk.ui.impl.UiEngineImpl.processEvent(UiEngineImpl.java:1626) の .EventProcessor.process(EventProcessor.java:138) org.zkoss.zk.ui.impl.UiEngineImpl.process(UiEngineImpl.java) :1410) org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate(UiEngineImpl.java:1134) で org.zkoss.zk.au.http.DHtmlUpdateServlet.process(DHtmlUpdateServlet.java:562) org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:457) で org.zkoss.zk.au.http.DHtmlUpdateServlet.doPost(DHtmlUpdateServlet.java:465) で javax.servlet.http で.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org. org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve. java:191) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) で org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) で org.apache.catalina.core .StandardEngineValve.invoke(StandardEngineValve.java:109) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) at org .apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JioEndpoint.java:489) at java.lang.Thread.run (出典不明)