2016-07-18 6 views
0

이 상쾌 페이지 후 EventQueue.subscribe 방법에서 모델을 설정할 수 없습니다 상쾌한 페이지 후 EventQueue.subscribe 방법에서 목록 상자에 대한 모델을 설정할 수 없습니다.

두 개의 페이지가 있습니다. 내 주소는 .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"); 
     }        
    } 
}); 

처음으로 정상적으로 작동합니다. 나는 이벤트를 받고, 객체를 얻고 successfuly 모델에 listbox를 제공한다. 그러나, 다른 페이지로 돌아가서 반환하면 NullPointerException이 발생합니다. 로그 파일에서 세션이 동일하고 페이지가 파괴되었지만 데스크탑이 살아 있음을 알았습니다. ZK 5.0.10을 사용하고 있습니다.

org.zkoss에서 org.zkoss.zk.ui.AbstractComponent.smartUpdate에서
org.zkoss.zk.ui.AbstractComponent.getAttachedUiEngine (AbstractComponent.java:387) (AbstractComponent.java:1487)에서 org.zkoss.zul.Listbox.resetDataLoader에서 org.zkoss.zk.ui.AbstractComponent.smartUpdate (AbstractComponent.java:1495)에서 .zk.ui.AbstractComponent.smartUpdate (AbstractComponent.java:1462) (Listbox.java:2982) com.is.sdbooks.controller.ComposerTest.onDoubleClick의 $에서 com.is.sdbooks.controller.ComposerTest.refreshModel (ComposerTest.java:169에서 org.zkoss.zul.Listbox.setModel (Listbox.java:2377))에서 sun.reflect.DelegatingMethodAcces에서 sun.reflect.NativeMethodAccessorImpl.invoke에서 sun.reflect.NativeMethodAccessorImpl.invoke0 (기본 방법) (알 수없는 소스)에서 데이터 그리드 (ComposerTest.java:180) org.zkoss.zk.ui.event.GenericEventListener.onEvent (GenericEventListener.java:81) at org.zkoss.zk.ui의 java.lang.reflect.Method.invoke (알 수없는 소스)의 sorImpl.invoke (알 수없는 소스) .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 (이벤트 .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. org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate에서 org.zkoss.zk.ui.impl.UiEngineImpl.process (UiEngineImpl.java:1410) (UiEngineImpl.java에서 UiEngineImpl.processEvent (UiEngineImpl.java:1626) : 1134) at org.zkoss.zk.au.http.DHtmlUpdateServlet.process (DHtmlUpdateServlet.java:562) at org.zkoss.zk.au.http.DHtmlUpdateServle javax의에서 javax.servlet.http.HttpServlet.service (HttpServlet.java:637)에서 t.doGet org.zkoss.zk.au.http.DHtmlUpdateServlet.doPost (DHtmlUpdateServlet.java:465)에서 (DHtmlUpdateServlet.java:457) org.apache.catalina.core.ApplicationFilterChain.doFilter에서 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:290)에서 .servlet.http.HttpServlet.service (HttpServlet.java:717) (ApplicationFilterChain.java : org.apache.catalina.core에서 org.apache.catalina.core.StandardContextValve.invoke에서 org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:233) (StandardContextValve.java:191)의 206). org.apache.catalina.core.StandardEngineValve.invoke에서 StandardHostValve.invoke org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102)에서 (StandardHostValve.java:127) (StandardEngineValve.java:109) 조직에서 .apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process (Http11Proc essor.java:852) org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process (Http11Protocol.java:588) org.apache.tomcat.util.net.JIoEndpoint $ Worker.run에서에서 (JIoEndpoint.java:489) java.lang.Thread.run (Unknown Source)

답변

0

문제가 해결되었습니다.현재 페이지가 살아 있는지 확인하기위한 조건 추가.

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

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