Невозможно установить модель для Listbox из метода EventQueue.subscribe после обновления страницы
Невозможно установить модель из EventQueue.subscribe
метод после обновления страницы.
У меня есть две страницы - моя главная .zul
и включены .zul
Есть отдельные контроллеры для каждого зул. Я публикую событие из контроллера включенной страницы, когда пользователь нажимает на listbox
на включенной странице и передать объект клиента.
eq = EventQueues.lookup("CLIENTS", EventQueues.DESKTOP, true);
eq.publish(new Event("onClick", null, customer));
В моей главной .zul
Контроллер страницы Я получаю событие и получаю объект клиента. Затем на основе его идентификатора я предоставляю основной 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.mart.pon.A. AbstractComponent.java:1462) в org.zkoss.zk.ui.AbstractComponent.smartUpdate(AbstractComponent.java:1495) в org.zkoss.zul.Listbox.resetDataLoader(Listbox.java:2982) в org.zkoss.zul.List.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(собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke(неизвестный источник) в java.lang.hod org.zkoss.zk.ui.event.GenericEventListener.onEvent(GenericEventListener.java:81) в org.zkoss.zk.ui.impl.EventProcessor.process0(EventProcessor.java:192) в 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) в org.zkoss.zk.ui.impl.EventProcessor.process0 (EventProcessor. Java: 192) в org.zkoss.zk.ui.impl.EventProcessor.process (EventProcessor.java:138) в org.zkoss.zk.ui.impl.UiEngineImpl.processEvent(UiEngineImpl.java:1626) в org.zkoss.zk.ui.impl.UiEngineImpl.process(UiEngineImpl.java:1410) в org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate(UiEngineImpl.java:1134) в org.zkoss.zk.autvp Процесс) в 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) в org.apc. (StandardWrapperValve.java:233) в org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) в org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.gava: org. 12).catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) в org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) в org.apache.catalina.connector.seroyterjj. 298) в org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) в org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:5apuomgg) или в.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) в java.lang.Thread.run(неизвестный источник)
1 ответ
Задача решена. Просто добавлено условие, чтобы проверить, жива ли текущая страница
if (!Executions.getCurrent().getDesktop().isAlive()) {
eq.unsubscribe(this);
return;
}
if(!self.getPage().isAlive()){
eq.unsubscribe(this);
return;
}
Customer customer = (Customer) event.getData();