2016-07-18 1 views
0

ページを更新した後にEventQueue.subscribeメソッドからモデルを設定できません。ページを更新した後、EventQueue.subscribeメソッドからリストボックスのモデルを設定できません

私はメインページ.zul.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モデルとリストボックスを提供します。しかし、別のページに行って戻り値を取得すると、NullPointerExceptionが返されます。ログファイルでは、セッションが同じで、ページが破棄されたが、デスクトップは生きていることに気付きました。私はZK 5.0.10を使用しています。 org.zkossでorg.zkoss.zk.ui.AbstractComponent.smartUpdate(AbstractComponent.java:1487)で
org.zkoss.zk.ui.AbstractComponent.getAttachedUiEngine(AbstractComponent.java:387)で

.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) )com.is.sdbooks.controller.ComposerTest.refreshModel(ComposerTest.java:169)com.is.sdbooks.controller.ComposerTest.onDoubleClick $のorg.zkoss.zul.Listbox.setModel(Listbox.java:2377) sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド)at sun.reflect.NativeMethodAccessorImpl.invoke(不明なソース)(sun.reflect.DelegatingMethodAcces)のdataGrid(ComposerTest.java:180) org.zkoss.zkoss.zk.uiのorg.zkoss.zk.ui.event.GenericEventListener.onEvent(GenericEventListener.java:81)の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.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.DHtmlUpdateServle org.zkoss.zk.au.http.DHtmlUpdateServlet.doPost(DHtmlUpdateServlet.java:465)のjavax.servlet.http.HttpServlet.service(HttpServlet.java:637)のt.doGet(DHtmlUpdateServlet.java:457) .servlet.http.HttpServlet.service(HttpServlet.java:717)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。 org.apache.catalina.valves.ErrorReportValve.invoke(StandardRequestValue.java:102)のorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)でのStandardHostValve.invoke(StandardHostValve.java:127) .apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)at org.apache.coyote.http11.Http11Processor.process(Http11Proc org.apache.tomcat.util.net.JIoEndpointの$ Http11ConnectionHandler.process(Http11Protocol.java:588)$ Worker.run(JIoEndpoint.java:489)のorg.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process

答えて

0

問題が解決しました。現在のページが生存しているかどうかを確認する条件を追加しました

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

if(!self.getPage().isAlive()){ 
      eq.unsubscribe(this); 
      return; 
     } 
Customer customer = (Customer) event.getData(); 
関連する問題