Primefaces 5.2 documentation (страница 430) говорит о опции: -CaseSensitive командлет
Определяет, если фильтрация будет чувствительно к регистру.
Таким образом, этот параметр применяется только в том случае, если вы используете filter = "true" и только для значений, которые вы вводите в поле фильтра.
Когда вы фокусируетесь на элементе управления SelectOneMenu и вводите значение, поиск всегда будет нечувствительным к регистру, как вы можете видеть в source code of Primefaces (line 848). Обратите внимание, что тексты помещаются в LowerCase перед сравнением.
return $(this).text().toLowerCase().indexOf(text.toLowerCase()) === 0;
Один из способов (не очень элегантно) вам решить эту проблему Переопределение Primefaces функция, которая отвечает за этот фильтр. Помните, что в этом случае другие элементы управления SelectOneMenu на одной странице также будут чувствительны к регистру.
Так линия 848 стала бы так:
return $(this).text().indexOf(text) === 0;
Еще одна деталь, которая, вероятно, следует считать (если вы действительно хотите переписать функцию), что на line 842 of source code, Primefaces отбрасывает все записи, которые имеют сдвиг ключ.
metaKey = e.metaKey||e.ctrlKey||e.shiftKey;
Таким образом, эта линия также должна быть изменена, как ниже, чтобы облегчить ввод заглавных букв:
metaKey = e.metaKey||e.ctrlKey;
Таким образом, учитывая эти два изменения, и final version of Primefaces 5.2 (minified), решение просто добавить следующее код где-то после SelectOneMenu.
<script>
PrimeFaces.widget.SelectOneMenu.prototype.bindKeyEvents = function() {
var a = this;
this.focusInput.on("keydown.ui-selectonemenu", function(d) {
var c = $.ui.keyCode, b = d.which;
switch (b) {
case c.UP:
case c.LEFT:
a.highlightPrev(d);
break;
case c.DOWN:
case c.RIGHT:
a.highlightNext(d);
break;
case c.ENTER:
case c.NUMPAD_ENTER:
a.handleEnterKey(d);
break;
case c.TAB:
a.handleTabKey();
break;
case c.ESCAPE:
a.handleEscapeKey(d);
break
}
}).on(
"keyup.ui-selectonemenu",
function(g) {
var f = $.ui.keyCode, d = g.which;
switch (d) {
case f.UP:
case f.LEFT:
case f.DOWN:
case f.RIGHT:
case f.ENTER:
case f.NUMPAD_ENTER:
case f.TAB:
case f.ESCAPE:
case f.SPACE:
case f.HOME:
case f.PAGE_DOWN:
case f.PAGE_UP:
case f.END:
case f.DELETE:
case 16:
case 17:
case 18:
case 224:
break;
default:
var i = $(this).val(), c = null, h = g.metaKey
|| g.ctrlKey;
if (!h) {
clearTimeout(a.searchTimer);
c = a.options.filter(function() {
return $(this).text()
.indexOf(i) === 0
});
if (c.length) {
var b = a.items.eq(c.index());
if (a.panel.is(":hidden")) {
a.selectItem(b)
} else {
a.highlightItem(b);
PrimeFaces.scrollInView(
a.itemsWrapper, b)
}
}
a.searchTimer = setTimeout(function() {
a.focusInput.val("")
}, 1000)
}
break
}
})
}
</script>
Чтобы проверить, помните, что есть a timer of 1 second между каждым нажатием клавиши, чтобы очистить кэш писем, которые были введены и начать новое слово.
вы можете положить пример вашего фактического поведения и ожидаемый один? Можете ли вы также уточнить, что вы имеете в виду с *, когда я нажимаю маленький или капитал A, он всегда показывает малый а (в зависимости от того, что произойдет раньше). *? Спасибо –
, когда поле выбора находится в фокусе. Я нажимаю букву алфавита «a» или нажимаю букву буквы «A», в обоих случаях она показывает только «a» в поле (потому что она встречается сначала в списке). Это фактическое поведение. Мое ожидаемое поведение заключается в том, что когда я нажимаю «a», он помещает «a», и когда я нажимаю «A», он помещает «A» в поле –
. Вы можете попробовать с автокомпонентом http://www.primefaces.org/ showcase/ui/input/autoComplete.xhtml –