0

Render on Demand for grid

asked 2010-08-10 07:57:45 +0800

osmadja gravatar image osmadja
12

Hello,
I'm having problems with big grids...

as explained in the https://sourceforge.net/tracker/?func=detail&atid=785191&aid=3042016&group_id=152762 report, I have set the library property to enable rod in my zk.xml:

<zk>
	<session-config>
		<timeout-uri>/timeout.html</timeout-uri>
		<session-timeout>3600</session-timeout>
	</session-config>
	<library-property>
          <name>org.zkoss.zul.grid.rod</name>
          <value>true</value>
    </library-property>
</zk>


But I continue experiencing very slow loading/rendering. I'm using the ZK 5.0.1 EE (build: 2010031810).

Did I insert the property in the correct way in zk.xml?

Is there a way to see if zk is really using rod?

Thanks,
Olivier

delete flag offensive retag edit

8 Replies

Sort by » oldest newest

answered 2010-08-12 21:01:31 +0800

lianglinfan gravatar image lianglinfan
48

I have the same problem.
I was using Zk CE 5.0.3, it took 5-6 seconds to show a grid with 50*40 cells.
Yesterday, I switched to ZK EE 5.0.4(Eval), but the problem still remains.
I've turned the ROD switch on in ZK.xml, the grid has a listmodel, render, a limited viewport( vflex = true) and is in paging mode.
Have I missed anything else ?

link publish delete flag offensive edit

answered 2010-08-17 22:05:40 +0800

henrichen gravatar image henrichen
3869 2
ZK Team

@lianglinfan,

Sample codes please.

link publish delete flag offensive edit

answered 2010-08-20 01:21:14 +0800

lianglinfan gravatar image lianglinfan
48

public class MyGridController extends GenericAutowireComposer {
private static final long serialVersionUID = 10001l;
private Window gridWnd;
private Grid grid;

public void doAfterCompose(Component window) throws Exception{
super.doAfterCompose(window);
//在grid.zul中没有指定,主要是为防止打开多个网格时ZK报ID重复的错误
gridWnd = (Window)window;
init( );
}

public void onQuery() throws InterruptedException{
long st1 = System.currentTimeMillis();
MyGridDataModel model = getModel();
long st2 = System.currentTimeMillis();
System.out.println("getModel time:"+(st2-st1));
if( model != null ){
//删除columns,生成columns
if( grid.getColumns()!= null ){
grid.removeChild(grid.getColumns());
}
genColumns(model);
grid.setModel(model);
}
}

private void init(){
long t = System.currentTimeMillis();
grid.setRowRenderer(new MyGridRowRender());
MyGridDataModel model = getModel();
//设置分页行数
grid.setPageSize(50);
if( model != null ){
//生成columns
genColumns(model);
//设置数据模型
grid.setModel(model);

Frozen frozen = new Frozen();
frozen.setColumns(1);
frozen.setStart(0);
frozen.setParent(grid);
}
System.out.print("init window time = "+(System.currentTimeMillis()-t));
}

private MyGridDataModel getModel() {
String[] rowHeaders = new String[100];
for( int i=0; i<rowHeaders.length; i++ ){
rowHeaders = ("row"+(i+1));
}
String[] colHeaders = new String[40];
for( int i=0; i<colHeaders.length; i++ ){
colHeaders = ("col"+(i+1));
}

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date currentTime = new Date();
String time =formatter.format(currentTime);
Object[][] datas = new Object[rowHeaders.length][];
for( int i=0; i<datas.length; i++ ){
datas = new Object[colHeaders.length];
for( int j=0; j<datas.length; j++ ){
datas = time;
}
}
return new MyGridDataModel(colHeaders, rowHeaders, datas);
}

private void genColumns(MyGridDataModel model){
String[] colHeaders = model.getColMembers();
String[] rowHeaders = model.getRowMembers();

if( colHeaders != null && colHeaders.length>0 && rowHeaders != null && rowHeaders.length>0 ){
int colDims = 1;
int rowDims = 1;

//生成columns
Columns columns = new Columns();
columns.setParent(grid);
columns.setSizable(true);

for( int i =0; i<rowDims; i++ ){
Column col = new Column();
col.setParent(columns);
col.setWidth("120px");
}

for( int i=0; i<colHeaders.length; i++ ){
Column col = new Column();
columns.appendChild(col);
col.setLabel(colHeaders);
col.setWidth("120px");
}
}
}

public class MyGridRowRender implements RowRenderer {

@Override
public void render(Row row, Object data) throws Exception {
if( data != null && data instanceof Object[] ){
row.setStyle("padding:0");
row.setHeight("20px");
Object[] objs = (Object[])data;
if( objs.length == 2){
String rowHeader = (String)objs[0];
Object[] datas = (Object[])objs[1];
if( rowHeader != null ){
renderRowHeaders(row, rowHeader);
}
if( datas != null ){
renderDatas(row, datas);
}
}
}
}

private void renderRowHeaders(Row row, String rowHeader){
if( rowHeader != null ){
Cell hbox = new Cell();
hbox.setWidth("100%");
hbox.setHeight("20px");
hbox.setStyle("background:#c3e7fb;white-space:nowrap;overflow:hidden;text-overflow:ellipsis");
hbox.setValign("center");
hbox.setParent(row);
new Label(rowHeader).setParent(hbox);
}
}

private void renderDatas(Row row, Object[] datas){
if( datas != null){
for( int i=0; i<datas.length; i++ ){
Label lbl = new Label();
Object data = datas;
if( data != null ){
lbl.setValue(data.toString());
}
lbl.setParent(row);
}
}
}
}
public class MyGridDataModel extends AbstractListModel
implements ListModelExt, ListSubModel, java.io.Serializable {

private final static long serialVersionUID = 12345l;

private String[] colMembers;
private String[] rowMembers;
private Object[][] datas;

public MyGridDataModel(){
super();
}
public MyGridDataModel(String[] colMembers,
String[] rowMembers,
Object[][] datas){
this.colMembers = colMembers;
this.rowMembers = rowMembers;
this.datas = datas;
}

/**
* 返回每行数据
* 这里返回一个数组,包括行维度成员和该行数据
*/
public Object getElementAt(int index) {
if( datas != null && rowMembers!= null && colMembers != null &&
datas.length == rowMembers.length &&
index < datas.length ){
Object[] rowDatas = new Object[2];
rowDatas[0] = rowMembers;
rowDatas[1] = datas;
return rowDatas;
}
return null;
}
@Override
public int getSize() {
return (datas != null ) ? datas.length: 0;
}
@Override
public ListModel getSubModel(Object value, int rows) {
return null;
}
@Override
public void sort(Comparator cmpr, boolean ascending) {
}

public String[] getColMembers(){
return colMembers;
}
public String[] getRowMembers(){
return rowMembers;
}
public Object[][] getDatas(){
return datas;
}
}
}

link publish delete flag offensive edit

answered 2010-08-20 01:24:38 +0800

lianglinfan gravatar image lianglinfan
48

Thanks a lot, Herichen.

Above is the java file of Controller, and the .zul file is attached below.

<?page title="new page title" contentType="text/html;charset=UTF-8"?>
<zk>
<window title="123" width ="80%" height="100%" closable ="true" sizable ="true" maximizable="true"
border="normal" apply="com.bivision.cfs.grid.ui.MyGridController" >
<borderlayout>
<north>
<menubar id="menu" height="25px">
<menuitem id="toExcelMItem" label="ToExcel" forward="onClick=onToExcel" />
<menuitem id="queryMItem" label="query" forward="onClick=onQuery" />
</menubar>
</north>
<center>
<borderlayout>
<center>
<grid id="grid" vflex="true" mold="paging" >
</grid>
</center>
</borderlayout>
</center>
</borderlayout>
</window>
</zk>

link publish delete flag offensive edit

answered 2010-08-24 02:55:27 +0800

henrichen gravatar image henrichen
3869 2
ZK Team

Has confirmed as a bug and fixed. Please check comments in the bug tracker.

https://sourceforge.net/tracker/?func=detail&atid=785191&aid=3042016&group_id=152762

link publish delete flag offensive edit

answered 2010-08-25 06:07:44 +0800

osmadja gravatar image osmadja
12

Thanks Henri!

How can I test the correction?

Thanks,
Olivier

link publish delete flag offensive edit

answered 2010-08-30 01:48:49 +0800

lianglinfan gravatar image lianglinfan
48

Thanks, Henrichen. Is the patch available in ZK ee 5.0.4(EVAL) 20100826 ?

link publish delete flag offensive edit

answered 2010-08-30 03:09:02 +0800

henrichen gravatar image henrichen
3869 2
ZK Team

Should be.

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: 2010-08-10 07:57:45 +0800

Seen: 688 times

Last updated: Aug 30 '10

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