Я работаю на странице JSF, которая имеет выпадающее на основе List<SelectItem>
:
<h:selectOneMenu value="#{bean.selectedItem}">
<f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>
Я должен получить и значение и маркировку в настоящее время выбранный пункт. Прямо сейчас я только получаю значение. Как я могу получить маркировку, также?
Вы не можете. Вот как работает HTML. Вы знаете, JSF - это генератор HTML-кода. JSF
генерирует HTML
. Элемент HTML
отправит только атрибут value
выбранного элемента
. Он не отправит свой ярлык.
Но это не должно быть большой проблемой. Вы, а именно , уже знаете как значение, так и метку на стороне сервера, внутри # {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, представляющий сущность, и установить весь объект как значение через преобразователь.