Как получить и маркировку и значение от f:selectItems

Я работаю на странице JSF, которая имеет выпадающее на основе List<SelectItem>:

<h:selectOneMenu value="#{bean.selectedItem}">
    <f:selectItems value="#{bean.availableItems}" />
</h:selectOneMenu>

Я должен получить и значение и маркировку в настоящее время выбранный пункт. Прямо сейчас я только получаю значение. Как я могу получить маркировку, также?

18
задан BalusC 6 March 2015 в 09:18
поделиться

1 ответ

Вы не можете. Вот как работает HTML. Вы знаете, JSF - это генератор HTML-кода. JSF генерирует 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, представляющий сущность, и установить весь объект как значение через преобразователь.

См. Также:

47
ответ дан 30 November 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: