0

Cannot set model from EventQueue.subscribe method after refreshing page.

I have two pages - my main .zul and included .zul files.There are separate controllers for each zul. I publish event from included page's controller when a user clicks on the listbox on the included page and pass customer object.

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

In my main .zul page's controller I receive event and retrieve customer object. Then, based on its id I provide main listbox with corresponding data.

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");
       }                              
    }
});

First time, it works fine. I receive event, get the object and successfuly provide listbox with model. However, when I go to another page and return I get NullPointerException. In log file, I noticed that session is the same, page was destroyed, but desktop is alive. I am using ZK 5.0.10.

at
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) at org.zkoss.zk.ui.AbstractComponent.smartUpdate(AbstractComponent.java:1495) at org.zkoss.zul.Listbox.resetDataLoader(Listbox.java:2982) at org.zkoss.zul.Listbox.setModel(Listbox.java:2377) at com.is.sdbooks.controller.ComposerTest.refreshModel(ComposerTest.java:169) at com.is.sdbooks.controller.ComposerTest.onDoubleClick$dataGrid(ComposerTest.java:180) at 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) at org.zkoss.zk.ui.event.Events.sendEvent(Events.java:306) at org.zkoss.zk.ui.event.Events.sendEvent(Events.java:329) at 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) at org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate(UiEngineImpl.java:1134) at org.zkoss.zk.au.http.DHtmlUpdateServlet.process(DHtmlUpdateServlet.java:562) at org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:457) at org.zkoss.zk.au.http.DHtmlUpdateServlet.doPost(DHtmlUpdateServlet.java:465) at 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.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.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(Unknown Source)

Sanoop Surendran
  • 3,484
  • 4
  • 28
  • 49
Andreh
  • 1
  • 1

1 Answers1

0

Problem solved. Just added condition to check if current page is alive

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

if(!self.getPage().isAlive()){
            eq.unsubscribe(this);
            return;
       }
Customer customer = (Customer) event.getData();
Andreh
  • 1
  • 1