我通过我认为相当肮脏的技巧解决了这个问题:
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 的英语和挪威语输入自动补全,而不管选择的本地化。