Как получить атрибут метки HTML в f: selectItems?

Тег JSF-2 f:selectItems, который перебирает набор POJO, предлагает параметры value и itemLabel

Они генерируют <option> элементов формы

<option value="value">itemLabel</option>

Теперь HTML предлагает еще один атрибут под названием label для тега <option>.

<option value="value" label="something_else">itemLabel</option>

но я не вижу способа использовать это через JSF. Предыстория вопроса заключается в том, что у меня есть свои itemLabels на локализованном языке, но я хочу, чтобы Select2 (который заменяет здесь <select>) также мог автозаполнять и сопоставлять английское имя. Это я хочу скрыть в атрибуте label.

Есть идеи?


person Antares42    schedule 08.07.2013    source источник


Ответы (1)


Я решил это тем, что считаю довольно грязным трюком:

Я сгенерировал параметры, используя f:selectItems, следующим образом:

    <h:selectManyMenu class="MySelectField" id="MySelectField" name="input"
        value="#{...}" converter="...">
            <f:selectItems value="#{...}" var="..."
                itemLabel="Localized_Label|EnglishLabel/NorwegianLabel"
                />
    </h:selectManyMenu>

производство

<option value="SOME_CODE">Localized_Label|EnglishLabel/NorwegianLabel</option>

Затем я запросил часть, которую хочу скрыть, в атрибуте label (и настроил Select2 так, чтобы он также сопоставлял ввод пользователя с указанным атрибутом):

    $(document).ready(function() {
        $(".MySelectField option").each(function(){
            tmp=$(this).text().split("|");
            $(this).attr('label',tmp[1]);
            $(this).text(tmp[0]);
            });
        $(".MySelectField").select2({
            matcher: function(term, text, opt) {                    
                return text.toUpperCase().indexOf(term.toUpperCase())>=0
                || opt.attr("label").toUpperCase().indexOf(term.toUpperCase())>=0;
            }
        });
    });

в результате чего

<option value="SOME_CODE" label="EnglishLabel/NorwegianLabel">Localized_Label</option>

с вызовом Select2 поверх этого.

Теперь это позволяет пользователю получать автозаполнение Select2 как для английского, так и для норвежского ввода, независимо от выбранной локализации.

person Antares42    schedule 08.07.2013
comment
Одна альтернатива, аналогичная тому, что обсуждается BalusC в этом вопросе, заключается в использовании itemEscaped="false" и вставьте английские метки в качестве комментариев, например: <option...>Localized_Label<!--EnglishLabel/NorwegianLabel--></option>, но, похоже, это работает только для SelectOneRadio, а не для SelectOneMenu или SelectManyMenu, где все теги удаляются автоматически. - person Antares42; 09.07.2013