public static Converter getSelectItemConverter(Application facesApplication, Iterator<SelectItem> selectItems) {
Converter converter = null;
while (selectItems.hasNext() && converter == null) {
SelectItem selectItem = selectItems.next();
if (selectItem instanceof SelectItemGroup) {
SelectItemGroup selectItemGroup = (SelectItemGroup) selectItem;
Iterator<SelectItem> groupSelectItems = Iterators.forArray(selectItemGroup.getSelectItems());
// Recursively get the converter from the SelectItems of the SelectItemGroup
converter = getSelectItemConverter(facesApplication, groupSelectItems);
}
else {
Class<?> selectItemClass = selectItem.getValue().getClass();