package zk.gae; import java.util.*; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.event.ForwardEvent; import org.zkoss.zk.ui.event.InputEvent; 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.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Combobox; import org.zkoss.zul.ListModelList; import org.zkoss.zul.Textbox; public class TestComposer extends SelectorComposer { private static final long serialVersionUID = -8290160089594988981L; @Wire private Combobox cbx; private List _data = new ArrayList(); public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); _data.add("Item one"); _data.add("Item two"); _data.add("Item three"); cbx.setModel(new ListModelList(matchedFieldOffices(null))); // METHOD one, add EventListener manually, works fine cbx.addEventListener("onChanging", new org.zkoss.zk.ui.event.EventListener() { public void onEvent (Event e) { updateFieldOfficeList((InputEvent)e); } }); } // METHOD two, use @Listen, not work // @Listen("onChanging = #cbx") public void updateFieldOfficeList(InputEvent event) { cbx.setModel(new ListModelList(matchedFieldOffices(event.getValue()))); } private List matchedFieldOffices (String val) { List matchs = new ArrayList(); if (val == null) { matchs.addAll(_data); } else { for (int i = 0; i < _data.size(); i++) { if (((String)_data.get(i)).startsWith(val)) { matchs.add(_data.get(i)); } } } return matchs; } }