public static List<ClientSelectItem> getClientSelectItems( FacesContext facesContext, AbstractSelectManyComponent select, Iterator<SelectItem> selectItems) { List<ClientSelectItem> clientSelectItems = new ArrayList<ClientSelectItem>(); Object object = select.getValue(); List values; if (object == null) { values = new ArrayList(); } else if (object instanceof List) { values = (List) object; } else if (object instanceof Object[]) { values = Arrays.asList((Object[]) object); } else { throw new IllegalArgumentException( "Value expression must evaluate to either a List or Object[]"); } int count = values.size(); // TODO: Deal with SelectItemGroups while (selectItems.hasNext()) { SelectItem selectItem = selectItems.next(); boolean selected; int sortOrder; if (values.contains( selectItem .getValue())) { // TODO: this requires value#equals() to be overridden. Redo with // comparators? selected = true; sortOrder = values.indexOf(selectItem.getValue()); } else { selected = false; sortOrder = count; } ClientSelectItem clientSelectItem = SelectHelper.generateClientSelectItem( facesContext, select, selectItem, sortOrder, selected); clientSelectItems.add(clientSelectItem); if (!selected) { count++; } } Collections.sort(clientSelectItems, clientSelectItemComparator); return clientSelectItems; }