Заполнение selectItems комбинированного списка (метка, значение) с использованием управляемого компонента
На моей странице есть комбо, которое я хочу заполнить некоторыми ключевыми словами из конфигурации. Я хочу использовать управляемый компонент для этого.
Допустим, у меня есть бин с именем Config, в котором есть поле списка категорий...
public class Configuration implements Serializable {
private static final long serialVersionUID = 1L;
private List<String> categories;
public List<String> getCategories() {
if (categories == null)
categories = getCats();
return categories;
}
//... etc.
}
Когда я использую это поле для комбо, оно работает хорошо...
<xp:comboBox>
<xp:selectItems>
<xp:this.value><![CDATA[#{config.categories}]]></xp:this.value>
</xp:selectItems>
</xp:comboBox>
Но это всего лишь список меток. Мне тоже нужны ценности. Как мне заполнить selectItems моей комбо двумя строками - меткой и значением?
РЕДАКТИРОВАТЬ:
Я попытался создать объект Combo с полями меток и значений и использовать повтор внутри моего comboBox.
<xp:comboBox>
<xp:repeat id="repeat1" value="#{config.combo}" var="c" rows="30">
<xp:selectItem itemLabel="#{c.label}" itemValue="#{c.value}" />
</xp:repeat>
</xp:comboBox>
До сих пор не работает...:-(
2 ответа
Вместо возврата List<String>
ваша функция должна вернуть List<javax.faces.model.SelectItem>
, Вот пример:
public static List<SelectItem> getComboboxOptions() {
List<SelectItem> options = new ArrayList<SelectItem>();
SelectItem option = new SelectItem();
option.setLabel("Here's a label");
option.setValue("Here's a value");
options.add(option);
return options;
}
Преимущество использования этого метода (помимо того, что нет необходимости использовать эти непонятные вещи:-) в том, что вы также можете SelectItemGroup
класс для группировки вариантов:
public static List<SelectItem> getGroupedComboboxOptions() {
List<SelectItem> groupedOptions = new ArrayList<SelectItem>();
SelectItemGroup group = new SelectItemGroup("A group of options");
SelectItem[] options = new SelectItem[2];
options[0] = new SelectItem("here's a value", "here's a label");
options[1] = new SelectItem("here's a value", "here's a label");
group.setSelectItems(options);
groupedOptions.add(group);
return groupedOptions;
}
Ты можешь использовать SelectItems
, (см. http://docs.oracle.com/javaee/6/api/javax/faces/model/SelectItem.html).
Вы можете указать как значение и метку, так и только значение.
import javax.faces.model.SelectItem;
public List<SelectItem> getCategories() {
try {
ArrayList<SelectItem> ret = new ArrayList<SelectItem>();
ret.add(new SelectItem("my value", "my label"));
return ret;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}