-
FEATURED COMPONENTS
First time here? Check out the FAQ!
With ZK6 I have a grid where I'm using a composer class and row renderer to build the grid contents. All the editable cells in the grid are using 'in-place' editing. The columns are either doublebox or combobox components.
I'm trying to trap the onChange event for both doublebox and combobox using a programmatic 'addForward' declaration in the row renderer class, like...
ComboboxCellDO aComboxboxCellDO = (ComboboxCellDO) aCellDO; Combobox aLookup = RowRendererUtil.addInplaceCombox(aComboxboxCellDO.getModel(),aComboxboxCellDO.getValue()); CellTypeConverter.setCellIndex(aLookup, i); aLookup.setId("lookupR"+index+"C"+i); aLookup.addForward("onChange",getParent(),"onRowComboChange");
@Listen("onForward = combobox") public void onRowComboChange(ForwardEvent anEvent) { Component aComp = anEvent.getOrigin().getTarget(); String aName = aComp.getId(); }
One thought: is there any difference in forward message receiving behaviour between a Window and a Panel?
In my new ZK6 app I'm using Panel as the outer container for the grid, and the 'addForward' applied to a row level combo box created inside the grid row rendering class just doesn't work. In the equivalent ZK5 app I used a Window and it works.
I've just tried switching from using Panel to Window and it made no difference - I'm not getting the onForward events.
I'm wondering whether its the in place editing that is somehow interfering with normal event propagation?
Hi,
The annotation binding in SelectComposer is only affect the components in zul file,
the addForward is works with (Generic)ForwardComposer only,
for dynamic created component in SelectComposer, please try use addListener,
please refer to the sample below:
zul file:
<zk> <label id="msg" value="msg: " /> <window apply="test.TestSelectComposer"> <grid id="grid1"></grid> <combobox> <comboitem label=" ci 1" /> <comboitem label=" ci 2" /> </combobox> </window> <window apply="test.TestGenericForwardComposer"> <grid id="grid2"></grid> </window> </zk>
TestSelectComposer.java
package test; import java.util.*; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.select.SelectorComposer; import org.zkoss.zk.ui.select.annotation.Listen; import org.zkoss.zk.ui.select.annotation.Wire; import org.zkoss.zul.*; public class TestSelectComposer extends SelectorComposer { // wire all grid in zul file @Wire("grid") List<Grid> grids; public void doAfterCompose (Component comp) throws Exception { super.doAfterCompose(comp); final Grid grid = grids.get(0); List l = new ArrayList(); l.add("cbx1"); grid.setModel(new ListModelList(l)); grid.setRowRenderer(getRowRenderer()); } // bind event to combobox in zul file @Listen("onChange = combobox") public void onRowComboChange () { Label l = (Label)grids.get(0).getPage().getFellow("msg"); l.setValue(l.getValue() + " on row combo change in select composer"); } // row renderer of grid private RowRenderer getRowRenderer () { return new RowRenderer() { public void render(Row row, Object data) throws Exception { // add combobox Combobox cbx = getNewCombobox(); // add event listener cbx.addEventListener("onChange", new org.zkoss.zk.ui.event.EventListener () { public void onEvent (Event evt) { onRowComboChange(); } }); cbx.setParent(row); } }; } private Combobox getNewCombobox () { Combobox cbx = new Combobox(); new Comboitem(" ci 1").setParent(cbx); new Comboitem(" ci 2").setParent(cbx); return cbx; } }
TestGenericForwardComposer.java
package test; import java.util.*; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.*; public class TestGenericForwardComposer extends GenericForwardComposer { Grid grid2; public void doAfterCompose (Component comp) throws Exception { super.doAfterCompose(comp); final Component parent = comp; List l = new ArrayList(); l.add("cbx1"); grid2.setModel(new ListModelList(l)); grid2.setRowRenderer(new RowRenderer() { public void render(Row row, Object data) throws Exception { Combobox cbx = new Combobox(); new Comboitem(" ci 1").setParent(cbx); new Comboitem(" ci 2").setParent(cbx); // addforward event cbx.addForward("onChange", parent, "onRowComboChange"); cbx.setParent(row); } }); } public void onRowComboChange () { Label l = (Label)page.getFellow("msg"); l.setValue(l.getValue() + " on row combo change in generic forward composer"); } }
Regards,
Ben
Asked: 2012-04-29 19:28:39 +0800
Seen: 289 times
Last updated: May 01 '12