0

huge data use listbox paging problem demo

asked 2009-11-19 05:29:00 +0800

yuzexu_zk gravatar image yuzexu_zk
240 2

import java.util.ArrayList;
import java.util.List;

import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.ext.AfterCompose;
import org.zkoss.zul.AbstractListModel;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
import org.zkoss.zul.Paging;
import org.zkoss.zul.event.PagingEvent;
import org.zkoss.zul.event.ZulEvents;
import org.zkoss.zul.ext.Paginal;

public class MyListbox extends Listbox implements AfterCompose
{
private boolean needUpdateTotalSize = true;
//
private boolean needAddPagingListener = true;

private int totalSize = 0;

public void afterCompose()
{
this.setItemRenderer(new MyRenderer());
this.setPaginal(this.getPaginal());
this.refreshModel();
}
class MyRenderer implements ListitemRenderer
{

@Override
public void render(Listitem item, Object data) throws Exception
{
item.setLabel(String.valueOf(data));

}

}
class PagingListModel extends AbstractListModel
{
private static final long serialVersionUID = 1L;
private List model = new ArrayList();
final List list = new ArrayList();
public PagingListModel(int page , int pageSize)
{
for(int i = 0 ; i < 100000 ; i ++)
{
list.add(i);
}
model = list.subList(page * pageSize , (page + 1) * pageSize );
}

public int getTotalSize()
{
return list.size();
}

public Object getElementAt(int index)
{
return model.get(index);
}

public int getSize()
{
return model.size();
}

}
private void refreshModel()
{
final PagingListModel pagingModel = new PagingListModel(this.getActivePage() , this.getPageSize());
this.setModel(pagingModel);
if(needUpdateTotalSize)
{
getPaginal().setTotalSize(totalSize = pagingModel.getTotalSize());
needUpdateTotalSize = false;
}
}

public void setPaginal(Paginal paginal)
{
if(paginal != null && needAddPagingListener)
{
needAddPagingListener = false;
paginal.addEventListener(ZulEvents.ON_PAGING, new EventListener(){

public void onEvent(Event evt) throws Exception
{
final PagingEvent pagingEvent = (PagingEvent) evt;
((Paging)evt.getTarget()).setAutohide(false);
refreshModel();
//((Paging)evt.getTarget()).setTotalSize(totalSize);
//((Paging)evt.getTarget()).setActivePage(pagingEvent.getActivePage());
}
});
}
super.setPaginal(paginal);
}
}

<?page title="new page title" contentType="text/html;charset=UTF-8"?>
<zk>
<window title="new page title" border="normal">
<listbox checkmark="true" multiple="true" use="sbr.MyListbox" mold="paging" pageSize="20">
<listhead>
<listheader id="header1" label="" sort="auto" />
</listhead>
</listbox>
</window>
</zk>

if i reset the model the paging totalsize also be updated
if i update set totalsize and activepage the items will be clear

please help me how i to do?

delete flag offensive retag edit

3 Replies

Sort by ยป oldest newest

answered 2009-11-19 08:49:07 +0800

terrytornado gravatar image terrytornado flag of Germany
9393 3 7 16
http://www.oxitec.de/

why you don't use my paging+sorting Wrapper?
Please read first this article.

best
Stephan

link publish delete flag offensive edit

answered 2009-11-19 18:49:25 +0800

yuzexu_zk gravatar image yuzexu_zk
240 2

sorry i want to use paging
for:
<listbox mold="paging" pageSize="20">
</listbox>

i do want to use paging
for:
<listbox >
</listbox>
<paging id="mypaging" />

can you help me or have any good idea?

link publish delete flag offensive edit

answered 2009-11-20 04:59:18 +0800

terrytornado gravatar image terrytornado flag of Germany
9393 3 7 16
http://www.oxitec.de/

updated 2009-11-20 05:00:06 +0800

i do want to use paging 
for:
<listbox >
</listbox>
<paging id="mypaging" />

can you help me or have any good idea?

That's the useCase for my wrapper. Additionally you can do a remembered sorting on the DB.

Please take the time to read the article.

best
Stephan

link publish delete flag offensive edit
Your reply
Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

[hide preview]

Question tools

Follow

RSS

Stats

Asked: 2009-11-19 05:29:00 +0800

Seen: 1,183 times

Last updated: Nov 20 '09

Support Options
  • Email Support
  • Training
  • Consulting
  • Outsourcing
Learn More