/* B70_ZK_3045VM.java Purpose: Description: History: 9:40 AM 12/24/15, Created by jumperchen Copyright (C) 2015 Potix Corporation. All Rights Reserved. */ package org.zkoss.zktest.test2; import java.lang.reflect.Field; import java.util.Map; import org.zkoss.bind.Binder; import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.ContextParam; import org.zkoss.bind.annotation.ContextType; import org.zkoss.bind.annotation.Init; import org.zkoss.bind.annotation.NotifyChange; import org.zkoss.bind.impl.BinderImpl; import org.zkoss.bind.tracker.impl.TrackerImpl; import org.zkoss.zul.ListModelList; /** * @author jumperchen */ public class B70_ZK_3045VM { private ListModelList<Pojo> data = new ListModelList<Pojo>(); private BinderImpl binder; public B70_ZK_3045VM() { reload(); } @Init public void init(@ContextParam(ContextType.BINDER) Binder binder) { this.binder = (BinderImpl) binder; } public ListModelList<Pojo> getModel() { return data; } public int getComponentsCount() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { TrackerImpl tracker = (TrackerImpl) binder.getTracker(); Field field = TrackerImpl.class.getDeclaredField("_compMap"); field.setAccessible(true); Map<?, ?> map = (Map<?, ?>) field.get(tracker); return map.size(); } @Command @NotifyChange("*") public void doMemoryLeak() { reload(); } private void reload() { data.clear(); for (int a=0; a<2; a++) { data.add(new Pojo("Test - "+a)); } } public static class Pojo { private String data; public Pojo(String data) { this.data = data; } public void setData(String data) { this.data = data; } public String getData() { return data; } } }