Вы не можете. Вот так работает HTML. Вы знаете, JSF является генератором HTML-кода. JSF <h:selectOneMenu>
генерирует HTML <select><option>
. Элемент HTML <select>
будет отправлять только атрибут value
выбранного элемента <option>
. Он не отправит свой ярлык.
Но это не должно быть большой проблемой. Вы уже знаете как значение, так и метку на стороне сервера, внутри #{bean.availableItems}
. Все, что вам нужно сделать, чтобы получить связанную метку, это получить ее по значению в качестве ключа. Я предлагаю сделать это Map
, что, в свою очередь, также может быть использовано в f:selectItems
.
Базовый стартовый пример:
public class Bean {
private String selectedItem; // +getter +setter
private Map<String, String> availableItems; // +getter
public Bean() {
availableItems = new LinkedHashMap<String, String>();
availableItems.put("value1", "label1");
availableItems.put("value2", "label2");
availableItems.put("value3", "label3");
}
public void submit() {
String selectedLabel = availableItems.get(selectedItem);
// ...
}
}
с
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItems value="#{bean.availableItems.entrySet()}" var="entry"
itemValue="#{entry.key}" itemLabel="#{entry.value}" />
</h:selectOneMenu>
и в результате
<p>Selected label is #{bean.availableItems[bean.selectedItem]}</p>
Альтернативой является завершение имени и значения в javabean-объекте, представляющем сущность, и установка целого объекта как значения через преобразователь.
Смотри также: