-
FEATURED COMPONENTS
First time here? Check out the FAQ!
Hi,
My application is running out of memory when user (or users) loads several times a listbox.
I'm using ZK Bind 6 to populate listboxes. But I tried listmodel and a render, old beans and it always runs out of memory.
This is my code to fill all beans nowadays:
listaBeansOriginal.clear(); //List that contains all beans listaBeansFiltrada.clear();//List linked with the listbox. It varies depends on user filters for(int i = 1; i <= maxRegistros; i++){ bean = NuevoBean(); //Instantiate a new bean LlenarBean(bean, i,listaDatos); //Fill the bean. listaDatos is an array with all necessary data to fill the bean listaBeansOriginal.add(bean);//Add the bean to the list } listaBeansFiltrada.addAll(listaBeansOriginal);//Loads all items to a list that will vary when user filters. We will work with this list. listaBeansOriginal never changes (it always contains all beans) and when user wants to clear filters listaBeansFiltrada is filled with listaBeansOriginal
Am I doing something wrong?? How can it be solved???
Thank you!
Hi Neus,
I have tested a sample based on your description and did not see the problem with Java VisualVM.
package j3oqrqt$v3;import java.util.ArrayList;
import java.util.List;import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;public class ListboxVM {
private List<Item> listaBeansOriginal;
private ListModelList<Item> listaBeansFiltrada;
private ListitemRenderer<Item> itemRenderer;
private String filter;
public ListModelList<Item> getModel() {
if(listaBeansFiltrada == null) {
listaBeansFiltrada = new ListModelList<Item>(getAllItems());
}
return listaBeansFiltrada;
}
public ListitemRenderer<Item> getRenderer() {
if (itemRenderer == null) {
itemRenderer = new ListitemRenderer<Item>() {
@Override
public void render(Listitem litem, Item item, int index) throws Exception {
new Listcell(item.getName()).setParent(litem);
}
};
}
return itemRenderer;
}
public String getFilter() {
return filter;
}
@NotifyChange
public void setFilter(String filter) {
this.filter = filter;
}
@Command
public void filter() {
listaBeansOriginal.clear();
listaBeansFiltrada.clear();
for(int i = 1; i <= 10; i++) {
Item item = new Item(filter + " " + i);
listaBeansOriginal.add(item);
}
listaBeansFiltrada.addAll(listaBeansOriginal);
}
private List<Item> getAllItems() {
listaBeansOriginal = new ArrayList<Item>();
listaBeansOriginal.add(new Item("David"));
listaBeansOriginal.add(new Item("Tom"));
listaBeansOriginal.add(new Item("Tim"));
listaBeansOriginal.add(new Item("Dove"));
listaBeansOriginal.add(new Item("John"));
listaBeansOriginal.add(new Item("Mary"));
listaBeansOriginal.add(new Item("Maria"));
return listaBeansOriginal;
}
public class Item {
private String name;
public Item(String name) {
this.name = name;
}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
}
<zk>
<div apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('j3oqrqt$v3.ListboxVM')">
<textbox value="@bind(vm.filter)" onChange="@command('filter')" instant="true"/>
<listbox model="@bind(vm.model)" itemRenderer="@bind(vm.renderer)">
<listhead>
<listheader label="name"></listheader>
</listhead>
</listbox>
</div>
</zk>
Asked: 2012-04-19 14:30:08 +0800
Seen: 141 times
Last updated: May 04 '12