package org.zkoss.zktest.bind.issue; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.zkoss.bind.BindContext; import org.zkoss.bind.annotation.Command; import org.zkoss.bind.annotation.NotifyChange; import org.zkoss.bind.converter.sys.ListboxModelConverter; import org.zkoss.zk.ui.Component; import org.zkoss.zul.ListModelList; import org.zkoss.zul.Listbox; import org.zkoss.zul.Listheader; public class B00775ListmodelSelection { private List<String> model; private Set<String> selected; public B00775ListmodelSelection() { generateModel(10); } private void generateModel(int size) { model = new ArrayList<String>(); for (int i = 0; i < size; i++) { model.add(String.valueOf(i)); } } public Set<String> getSelected() { return selected; } public void setSelected(Set<String> selected) { this.selected = selected; } public List<String> getModel() { return model; } @Command @NotifyChange("model") public void shrinkModel() { generateModel(2); } public static class Converter extends ListboxModelConverter { private static final long serialVersionUID = 1L; public Object coerceToUi(Object val, Listbox comp, BindContext ctx) { Object bean = super.coerceToUi(val, comp, ctx); if (bean instanceof ListModelList && comp instanceof Listbox) { Listbox listbox = (Listbox) comp; ListModelList<?> model = (ListModelList<?>) bean; if (listbox.isMultiple() && !model.isMultiple()) { model.setMultiple(true); } for (Object child : listbox.getListhead().getChildren()) { final Listheader hd = (Listheader) child; if ("natural".equals(hd.getSortDirection())) { continue; } else if ("ascending".equals(hd.getSortDirection())) { model.sort(hd.getSortAscending(), true); } else if ("descending".equals(hd.getSortDirection())) { model.sort(hd.getSortDescending(), true); } } } return bean; } } }