0

ZK6 - programatically created onForward not working?

asked 2012-04-29 19:28:39 +0800

davout gravatar image davout
1435 3 18

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");



In the related composer class I have...

@Listen("onForward = combobox")
public void onRowComboChange(ForwardEvent anEvent) {
	Component aComp = anEvent.getOrigin().getTarget();
	String aName = aComp.getId();
}



... but the 'onRowComboChange' handler is never called. Are these type of forward events still supported in ZK6?

delete flag offensive retag edit

3 Replies

Sort by ยป oldest newest

answered 2012-04-30 06:30:00 +0800

davout gravatar image davout
1435 3 18

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.

link publish delete flag offensive edit

answered 2012-04-30 09:35:38 +0800

davout gravatar image davout
1435 3 18

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?

link publish delete flag offensive edit

answered 2012-05-01 08:31:03 +0800

benbai gravatar image benbai
2228 6
http://www.zkoss.org

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

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: 2012-04-29 19:28:39 +0800

Seen: 289 times

Last updated: May 01 '12

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