Здравствуйте!
На странице А у меня есть LookupPickerField. При нажатии на “…” я перехожу на страницу Б(экран Browse), чтобы выбрать экземпляр записи. Мне необходимо запретить нажимать на кнопку “выбрать” (которая связывает страницу Б с А) при определенном условии, где можно это прописать?
Здравствуйте,
Вы можете создать анонимного наследника 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;
});
}
});
}
2 симпатии
Спасибо большое, получилось!