-
FEATURED COMPONENTS
First time here? Check out the FAQ!
In my grid I have a column likes this :
<toolbarbutton image="../../img/list.png"/>
At the 1st page of my grid , this image is displayed correctly. However, when i changed to another page of grid, this image disappears.
Was it a bug or am I missing something ?
Hi, vinhvo
Could you post a sample for reproduce it?
Yes. Very quick one :
View:
<?page title="new page title" contentType="text/html;charset=UTF-8"?> <?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" arg0="./workqueueWin"?> <zk> <window border="none" id="workqueueWin"> <grid mold="paging" pageSize="20" id="workQueueGrid"> <columns> </columns> <rows></rows> </grid> </window> </zk>
public class WorkQueueController extends GenericForwardComposer{ private Grid workQueueGrid; public void onCreate$workqueueWin(Event evt) throws Exception { renderWorkQueueGrid(); updateWorkQueueGrid(); } private void renderWorkQueueGrid(){//because EL expression is evaluated before databinding. Therefore, it 's not possible to use databinding and EL Columns cols= workQueueGrid.getColumns(); cols.getChildren().clear(); cols.appendChild(new Column("")); } private void updateWorkQueueGrid() throws Exception{ Rows rows= workQueueGrid.getRows(); rows.getChildren().clear(); for(int i=0;i<100;i++){ Row row= new Row(); Toolbarbutton kc= new Toolbarbutton(); kc.setImage("../../img/list.png"); kc.setStyle("background-color: transparent"); row.appendChild(kc); rows.appendChild(row); } } }
Only images in 1st page get displayed. Thank you.
I have tested your sample with ZK 5.0.2 and ZK 3.6.4 on FF and IE8
They worked well
My pictures put in WebContent
and set the image like below
kc.setImage("/img/ArrowLeft-16x16.png");
BTW, you can prepare your data in doBeforeCompose
then you can use databinding and EL
I create a sample
View:
<?page title="new page title" contentType="text/html;charset=UTF-8"?> <?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" arg0="./workqueueWin"?> <zk> <window border="none" id="workqueueWin" apply="ctrl.WorkQueueController"> <grid mold="paging" pageSize="20" id="workQueueGrid" model="@{workqueueWin$WorkQueueController.data}"> <columns> </columns> <rows > <row self="@{each=person}"> <toolbarbutton label="@{person.name}"/> </row> </rows> </grid> <grid > <rows> <row forEach="${workqueueWin$WorkQueueController.data}" > <toolbarbutton label="${each.name}" /> </row> </rows> </grid> </window> </zk>
Composer:
package ctrl; import java.util.*; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Page; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.metainfo.ComponentInfo; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.*; public class WorkQueueController extends GenericForwardComposer { private Grid workQueueGrid; List<Person> data; @Override public ComponentInfo doBeforeCompose(Page page, Component parent, ComponentInfo compInfo) { initData(); return super.doBeforeCompose(page, parent, compInfo); } private void initData() { data = new ArrayList<Person>(); data.add(new Person("Jimmy")); data.add(new Person("Katrina")); } public List<Person> getData(){ return data; } public class Person{ private String name; public Person(String name) { super(); this.name = name; } public String getName() { return name; } } }
I faced timing problem to use your example.
I have to use onCreate event to init my data(to get data from map argument). And it seems that onCreate is executed after EL had finished. Is there any way to get around this ?
You can refer to sequence when loading a page and Introduction of ZK Composer
Asked: 2010-05-17 02:02:36 +0800
Seen: 610 times
Last updated: May 17 '10