0

EventQueue.subscribe刷新页面后无法从方法设置模型。

我有两个页面 - 我的主要文件.zul和包含.zul文件。每个 zul 都有单独的控制器。当用户单击listbox包含页面上的并传递客户对象时,我会从包含页面的控制器发布事件。

eq = EventQueues.lookup("CLIENTS", EventQueues.DESKTOP, true);
eq.publish(new Event("onClick", null, customer));

在我.zul的主页控制器中,我接收事件并检索客户对象。然后,根据它的 id,我向 mainlistbox提供相应的数据。

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(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.zkoss.zk。ui.event.GenericEventListener.onEvent(GenericEventListener.java:81) at org.zkoss.zk.ui.impl.EventProcessor.process0(EventProcessor.java:192) at 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 .EventProcessor.process(EventProcessor.java:138) at org.zkoss.zk.ui.impl.UiEngineImpl.processEvent(UiEngineImpl.java:1626) at 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.doPost(DHtmlUpdateServlet.java:465) 在 javax.servlet.http 的 org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:457) .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. apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve. java:191) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) .StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at 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 (来源不明)

4

1 回答 1

0

问题解决了。刚刚添加了条件来检查当前页面是否存在

if (!Executions.getCurrent().getDesktop().isAlive()) {
            eq.unsubscribe(this);
            return;
       }

if(!self.getPage().isAlive()){
            eq.unsubscribe(this);
            return;
       }
Customer customer = (Customer) event.getData();
于 2016-07-18T08:25:13.440 回答