刷新页面

时间:2016-07-18 05:06:36

标签: listbox zk eventqueue

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

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

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)org.zkoss.zk.ui.AbstractComponent.smartUpdate(AbstractComponent.java:1487)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)atg.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)at 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 at at at org.zkoss.zk.ui.event.GenericEventListener.onEvent(GenericEventListener.java:81)at org.zkoss.zk.ui.impl.EventProcessor.process0(EventProcessor.java:192)at o位于org.zkoss.zk.ui的org.zkoss.zk.ui.event.Events.sendEvent(Events.java:306)的rg.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:138)。 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)org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:138)org.zkoss上的org.zkoss.zk.ui.impl.UiEngineImpl.processEvent(UiEngineImpl.java:1626)位于org.zkoss.zk.au.http.DHtmlUpdateServlet的org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate(UiEngineImpl.java:1134)的.zk.ui.impl.UiEngineImpl.process(UiEngineImpl.java:1410) .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)javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:233)位于org.apache的org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)。位于org.apache.catalina.coreal.alvoke.alvoke(StandardEngineValve.java:109)的org.apache.catalina.connector.CoyoteAdapter.service上的catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)(CoyoteAdapter.java: 298)org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)atg.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:588)at org.apache.tomcat.util java.lang.Thread.run中的.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489)(未知来源)

1 个答案:

答案 0 :(得分:0)

问题解决了。只是添加条件来检查当前页面是否还活着

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

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