如何将HTML“label”属性添加到f:selectItems中?

时间:2013-07-08 13:02:44

标签: html jsf-2 option jquery-select2

迭代POJO集合的JSF-2 tag f:selectItems提供参数valueitemLabel

这些会生成

形式的<option>个元素
<option value="value">itemLabel</option>

现在,HTML offers another attributelabel代码

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

但是我无法通过JSF看到如何使用那个。问题的背景是我的本地语言中的itemLabels,但是想要Select2(这里替换<select>)以便能够自动完成并匹配英文名称。我希望隐藏在label属性中。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我通过我认为相当肮脏的技巧解决了这个问题:

我使用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自动完成功能。