-
Bug
-
Resolution: Fixed
-
Normal
-
8.5.2.1, 8.6.0.1
-
Security Level: Jimmy
-
ZK 8.6.1 S1
Steps to Reproduce
run the fiddle: http://zkfiddle.org/sample/1ck4p32/4-global-command-handler-causing-NPE
click the buttons in order: 1, 2
Current Result
1 -> replaces a previously include src with a different page
2 -> causes NPE
Jan 15, 2019 3:54:55 PM org.zkoss.zk.ui.impl.UiEngineImpl handleError SEVERE: java.lang.NullPointerException at org.zkoss.zk.ui.AbstractComponent.getAttachedUiEngine(AbstractComponent.java:373) at org.zkoss.zk.ui.AbstractComponent.smartUpdate(AbstractComponent.java:1851) at org.zkoss.zk.ui.AbstractComponent.smartUpdate(AbstractComponent.java:1825) at org.zkoss.zul.impl.InputElement.setRawValue(InputElement.java:606) at org.zkoss.zul.impl.InputElement$2.setValue(InputElement.java:950) at org.zkoss.bind.impl.PropertyExpression.setValue(PropertyExpression.java:67) at org.zkoss.bind.impl.LoadPropertyBindingImpl.load(LoadPropertyBindingImpl.java:90) at org.zkoss.bind.impl.BinderImpl.doPropertyChange0(BinderImpl.java:480) at org.zkoss.bind.impl.BinderImpl.doPropertyChange(BinderImpl.java:455) at org.zkoss.bind.impl.BinderImpl.access$300(BinderImpl.java:136) at org.zkoss.bind.impl.BinderImpl$QueueListener.onEvent(BinderImpl.java:414) at org.zkoss.zk.ui.event.impl.DesktopEventQueue$QueueListener.onEvent(DesktopEventQueue.java:168) at org.zkoss.zk.ui.AbstractComponent.onEvent(AbstractComponent.java:3177) at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:3147) at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:3089) at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:138) at org.zkoss.zk.ui.impl.UiEngineImpl.processEvent(UiEngineImpl.java:1846) at org.zkoss.zk.ui.impl.UiEngineImpl.process(UiEngineImpl.java:1618) at org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate(UiEngineImpl.java:1321) at org.zkoss.zk.au.http.DHtmlUpdateServlet.process(DHtmlUpdateServlet.java:611) at org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:487) at org.zkoss.zk.au.http.DHtmlUpdateServlet.doPost(DHtmlUpdateServlet.java:495) at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
Expected Result
no exception
Debug Info
the include initially uses a URI param (-> defer-mode)
<include id="inc" src="globCommandReceiver.zul?any=param" />
when replacing the URI (without param) the mode implicitely changes to instant-mode
<include id="inc" src="empty.zul" />
Without the initial URI param the problem doesn't happen
<include id="inc" src="globCommandReceiver.zul" />
Root Cause
The child page of Include is not removed/cleaned. So the components are not detached and will keep listening to property changes.
A side effect of ZK-1148: https://github.com/zkoss/zk/pull/1195/files#diff-aca0546b43d3202fa1b9babc02ec6f2dR914 (DesktopImpl.java)
Workaround
- Don't use URI params for includes (avoids defer mode)
- Set the src to null before setting a new URI
e.g. <button label="replace include src" onClick='inc.setSrc(null); inc.setSrc("empty.zul");'/>
- relates to
-
ZK-1148 Able to handle the destroyed of a ViewModel.
- Closed