-
FEATURED COMPONENTS
First time here? Check out the FAQ!
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?
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
Asked: 2009-11-19 05:29:00 +0800
Seen: 1,183 times
Last updated: Nov 20 '09