-
FEATURED COMPONENTS
First time here? Check out the FAQ!
Hi everyone. I have a problem. My data is too big, so I can't load all of it to chosebox's model. This is my design, when users type on chosenbox, chosenbox will query database to get data, then set it to model. It works perfectly. There is only one problem, I can't catch onSearch event to add new item to chosenbox. source code is here: http://zkfiddle.org/sample/uao8dq/6-simplelistmodel-with-chosenbox#source-2 I don't know why it does not run on zkfiddle, but it work on my computer.
It seem like SimpleListModel can't be changed, therefore we can't catch onSearch event to add new item. Do you have any idea for this problem? Thanks :D
Hello bkstorm,
First of all please find below a modified version of your code that runs on zk fiddle:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.InputEvent;
import org.zkoss.zk.ui.event.KeyEvent;
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.zkmax.zul.Chosenbox;
import org.zkoss.zul.ListModel;
import org.zkoss.zul.SimpleListModel;
public class TestComposer extends SelectorComposer<Component> {
/**
*
*/
private static final long serialVersionUID = -5582437516748319706L;
@Wire
private Chosenbox cbx;
@Wire
private Chosenbox cbx2;
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
cbx.setModel(new SimpleListModel(Collections.emptyList()) {
@Override
public ListModel getSubModel(Object value, int nRows) {
return createModel(value.toString());
}
});
}
private ListModel<?> createModel(String value) {
List<String> data = new ArrayList<String>();
if (value.equals("aa")) {
data.add("aab");
data.add("aa-bb");
} else if (value.equals("bb")) {
data.add("bbcd");
data.add("bb-bb");
} else if (value.equals("cc")) {
data.add("ccc");
data.add("cc-bb");
} else if (value.equals("ddd")) {
data.add("dddd");
data.add("ddee");
}
return new SimpleListModel(data);
// return new ListModelList<>(data);
}
@Listen("onSearch = #cbx")
public void onSearchCbx(InputEvent event) {
System.out.println(event.getValue());
}
@Listen("onOK = #cbx")
public void onOKCbx(KeyEvent event) {
}
}
Furthermore you should use onSearching instead of on Search in order to accomplish your task.
http://books.zkoss.org/wiki/ZKComponentReference/Input/Chosenbox#Supported_Events
Best Regards,
Darksu
Asked: 2015-11-24 07:27:29 +0800
Seen: 17 times
Last updated: Nov 24 '15