Как заполнить SuggestionField собственным вариантом?

Добрый день!

Классная штука SuggestionField, но, видимо, хочется странного, как всегда.
Вопрос: Можно ли заставить SuggestionField заполнить атрибут значением, которое пользователь набрал руками, а не выбрал из возможных?

Скажем, есть сущность Device с атрибутом String category.
Есть сущность (типа справочник) Сategory с атрибутом String name.
В редакторе Device сделал categorySuggestionField, который подсказки берет из Category.name.
Так вот, если нет в справочнике еще такой категории, которая пользователю нужна, то как заставить SuggestionField принять значение, которое пользователь уже вколотил в него?

Про SuggestionPickerField знаю, но это долго - открывать окно браузера категорий, открывать редактор категории, сохранять и выбирать. Да и работает он только с ссылочными атрибутами.

Думаю, что как минимум, можно добавить кастомный action и кнопку к полю, что-то вроде “+”, по нажатию на который открывать edit-экран Сategory, а по его комиту сразу подставлять его в поле.

com.haulmont.cuba.gui.components.SuggestionField#setEnterActionHandler

По-моему это должно вам подойти.

Александр, тогда у меня вопрос. А возможность получить введенную пользователем строку имеется?

Метод void setEnterActionHandler(EnterActionHandler enterActionHandler);
принимает EnterActionHandler

В EnterActionHandler один метод
void onEnterKeyPressed(String searchString);

который как раз и передаёт строку, введенную пользователем.

2 симпатии

Спасибо Александр! Пара строк и оно работает как я и хотел.

SuggestionField.setEnterActionHandler(currentSearchString -> {
     SuggestionField.setValue(currentSearchString); 
});

Как оказалось, эта штука описана в руководстве, но только для случая SuggestionPickerField.