LookupPickerField Lookup Validator

Татьяна Зарецкая добавил(а) 1 нед. назад
С ответом

Здравствуйте!

На странице А у меня есть LookupPickerField. При нажатии на "..." я перехожу на страницу Б(экран Browse), чтобы выбрать экземпляр записи. Мне необходимо запретить нажимать на кнопку "выбрать" (которая связывает страницу Б с А) при определенном условии, где можно это прописать?

Комментарии (2)

фото
2

Здравствуйте,

Вы можете создать анонимного наследника LookupAction, в котором переопределить метод afterLookupWindowOpened и назначить на Lookup окно свой Validator:

@Inject
private LookupPickerField lookupPickerField;

@Override
public void init(Map<String, Object> params) {
    super.init(params);

    lookupPickerField.addAction(new PickerField.LookupAction(lookupPickerField) {
        @Override
        protected void afterLookupWindowOpened(Window lookupWindow) {
            super.afterLookupWindowOpened(lookupWindow);

            Lookup lookup = (Lookup) lookupWindow;
            // Назначаем валидатор и показываем нотификацию, если выбран неактивный пользователь
            // Validator должен вернуть false, если выбранные записи не подходят под условие
            lookup.setLookupValidator(() -> {
                Set<User> selected = ((Table<User>) lookup.getLookupComponent()).getSelected();
                boolean allMatch = selected.stream().allMatch(User::getActive);
                if (!allMatch) {
                    showNotification("You have to select only active users!");
                }
                return allMatch;
            });
        }
    });
}

фото
1

Спасибо большое, получилось!

фото