Uploaded image for project: 'ZK'
  1. ZK
  2. ZK-871

Global command and MVVM bean properties in session

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Invalid
    • Icon: Normal Normal
    • None
    • 6.0.0
    • Databind 2
    • None

      Process to reproduce the problem
      1. Set MVVM bean properties in session

      package demo;
      public class BookVM {
      	
      	List<Item> items;
      	String label2;
      	
      	public class Item {
      		String name;
      
      		public Item(String name) {
      			this.name = name;
      		}
      
      		public String getName() {
      			return name;
      		}
      	}
      	
      	public List<Item> getItems() {
      		items = (ListModelList<Item>) Sessions.getCurrent().getAttribute("items");
      		if (items == null) {
      			Sessions.getCurrent().setAttribute("items", items = new ListModelList<Item>());
      			items.add(new Item("A"));
      		}
      		return items;
      	}
      	
      	@GlobalCommand
      	public void doButton(@BindingParam("item") Item item) {
      		System.out.println("vm1:" + item.getName());
      	}
      }
      
      package demo;
      public class BookVM2 {
      
      	List<CheckItem> checkItems;
      	
      	public class CheckItem {
      		String name;
      
      		public CheckItem(String name) {
      			this.name = name;
      		}
      
      		public String getName() {
      			return name;
      		}
      	}
      	
      	public List<CheckItem> getCheckItems() {
      		checkItems = (ListModelList<CheckItem>) Sessions.getCurrent().getAttribute("checkItems");
      		if (checkItems == null) {
      			Sessions.getCurrent().setAttribute("checkItems", checkItems = new ListModelList<CheckItem>());
      			checkItems.add(new CheckItem("AAA"));
      		}
      		return checkItems;
      	}
      	
      	@GlobalCommand @NotifyChange("checkItems")
      	public void doButton(@BindingParam("item") Item item) {
      		System.out.println("vm2:" + item.getName());
      		CheckItem i = new CheckItem(item.getName());
      		checkItems.add(i);
      	}
      }
      

      2. load zul content below

      <zk>
      	<window border="normal" width="100%" height="100%">
      		<borderlayout>
      			<center>
      				<div apply="org.zkoss.bind.BindComposer" 
      					viewModel="@id('vm1') @init('demo.BookVM')" 
      					binder="@init(queueScope='session')">
      					<grid model="@load(vm1.items)">
      						<columns sizable="true">
      							<column />
      							<column />
      							<column />
      						</columns>
      						<template name="model" var="item">
      							<row>
      								<cell><label value="@bind(item.name)" /></cell>
      								<cell><label value="aaaa" /></cell>
      								<cell>
      									<button label="click" onClick="@global-command('doButton', item=item)" />
      								</cell>
      							</row>
      						</template>
      					</grid>
      				</div>
      			</center>
      			<east size="35%">
      				<div apply="org.zkoss.bind.BindComposer" 
      					viewModel="@id('vm2') @init('demo.BookVM2')" 
      					binder="@init(queueScope='session')">
      					<listbox model="@load(vm2.checkItems)">
      						<listhead sizable="true">
      							<listheader width="15%" />
      						</listhead>
      						<template name="model" var="citem">
      							<listitem>
      								<listcell label="@bind(citem.name)" />
      							</listitem>
      						</template>
      					</listbox>
      				</div>
      			</east>
      		</borderlayout>
      	</window>
      </zk>
      

      3. load the zul, and reload again
      4.click the button, you will see this exception
      Stack trace:

      java.lang.reflect.InvocationTargetException
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      	at java.lang.reflect.Method.invoke(Method.java:597)
      	at org.zkoss.bind.impl.ParamCall.call(ParamCall.java:108)
      	at org.zkoss.bind.impl.BinderImpl.doGlobalCommandExecute(BinderImpl.java:1314)
      	at org.zkoss.bind.impl.BinderImpl.doGlobalCommand(BinderImpl.java:1291)
      	at org.zkoss.bind.impl.BinderImpl.access$2(BinderImpl.java:1281)
      	at org.zkoss.bind.impl.BinderImpl$QueueListener.onEvent(BinderImpl.java:235)
      	at org.zkoss.zk.ui.event.impl.DesktopEventQueue$QueueListener.onEvent(DesktopEventQueue.java:145)
      	at org.zkoss.zk.ui.AbstractComponent.onEvent(AbstractComponent.java:2741)
      	at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2712)
      	at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:2653)
      	at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:136)
      	at org.zkoss.zk.ui.impl.UiEngineImpl.processEvent(UiEngineImpl.java:1699)
      	at org.zkoss.zk.ui.impl.UiEngineImpl.process(UiEngineImpl.java:1484)
      	at org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate(UiEngineImpl.java:1201)
      	at org.zkoss.zk.au.http.DHtmlUpdateServlet.process(DHtmlUpdateServlet.java:558)
      	at org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:456)
      	at org.zkoss.zk.au.http.DHtmlUpdateServlet.doPost(DHtmlUpdateServlet.java:464)
      	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
      	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
      	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
      	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401)
      	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
      	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
      	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
      	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
      	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
      	at org.mortbay.jetty.Server.handle(Server.java:326)
      	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
      	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945)
      	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
      	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
      	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
      	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
      	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
      Caused by: java.lang.NullPointerException
      	at org.zkoss.zk.ui.AbstractComponent.addMoved(AbstractComponent.java:478)
      	at org.zkoss.zul.Listitem.addMoved(Listitem.java:332)
      	at org.zkoss.zk.ui.AbstractComponent.setParent(AbstractComponent.java:1055)
      	at org.zkoss.zk.ui.AbstractComponent.insertBefore(AbstractComponent.java:1152)
      	at org.zkoss.zul.Listbox.insertBefore(Listbox.java:1591)
      	at org.zkoss.zul.impl.ListboxDataLoader.doListDataChange(ListboxDataLoader.java:107)
      	at org.zkoss.zkmax.zul.impl.LiveListboxDataLoader.doListDataChange(LiveListboxDataLoader.java:95)
      	at org.zkoss.zul.Listbox.onListDataChange(Listbox.java:2541)
      	at org.zkoss.zul.Listbox.access$17(Listbox.java:2523)
      	at org.zkoss.zul.Listbox$4.onChange(Listbox.java:459)
      	at org.zkoss.zul.AbstractListModel.fireEvent(AbstractListModel.java:60)
      	at org.zkoss.zul.ListModelList.add(ListModelList.java:162)
      	at org.zkoss.zktest.bind.issue.B00871BeanInSession2.doButton(B00871BeanInSession2.java:40)
      

            dennis dennis
            vincentjian vincentjian
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: