Отложенная загрузка опций для LookupField

Добрый день!
У меня есть LookupField, который при полной загрузке всех опций может загрузить более полумиллиона вариантов. Так как это большая нагрузка на БД и снижение производительности, есть идея загружать варианты только после того, как пользователь ввел скажем 3 символа.
Иначе говоря:

select e from Items e // Полная загрузка всех опций
---------------
select e from Items e where e.name like 'ite%' //Пользователь ввел "ite" и загрузился список

В принципе есть возможность подписаться на событие valueChange или воспользоваться newOptionHandler, но как я понимаю, в обоих случаях требуется нажатие Enter от пользователя, что не является удобным. Есть ли у вас какие нибудь идеи как это проще и удобней реализовать?

Добрый день!

Для Ваших целей подойдет компонент SuggestionField, который предназначен для поиска экземпляров сущности по строке, вводимой пользователем.

Глеб

2 симпатии

Спасибо за ответ!
А есть ли в SuggestionField опция nullOptionVisible? Если мне нужно просто стереть значение поля. В документации не нашел, а возможность занулить поле нужна. Сейчас если стираю значение, он выставляет его заново

Тогда воспользуйтесь SuggestionPickerField с действием picker_clear.

Спасибо!
Не могли бы вы подсказать, как лучше в SuggestionPickerField реализовать аналог метода setNewOptionHandler() из lookupField? Хотелось бы такое же поведение как и в примере из документации:

colorField.setNewOptionHandler(caption -> {
        Color color = metadata.create(Color.class);
        color.setName(caption);
        colorsDc.getMutableItems()
                .add(color);
        colorField.setValue(color);
    });

Можно ли скажем в enterActionHandler SuggestionPickerField’a передать текущую введенную строчку и по аналогии создать новую сущность и установить ее в поле?