Добрый день!
У меня есть экран Screen1, у него есть чекбокс, по нажатию которого открывается экран Screen2 (внутри него есть 4 чекбокса). Я пытаюсь в Screen1 реализовать подписку на изменение значения компонента SourceCodeEditor, код выглядит следующим образом:
public class Screen1 extends Screen {
@Autowired
private SourceCodeEditor Field;
@Subscribe("Field")
public void FieldValueChange(HasValue.ValueChangeEvent<String> event) {
Screen screen2 = UiControllerUtils.getScreen(Screen2.class);//получение вложенного экрана
boolean disableValue = StringUtils.isBlank(Field.getValue());
}
}
в методе я попытался получить доступ к вложенному экрану (не уверен, что он так называется), но это не работает. Как это сделать правильно?
Не могли бы Вы предоставить чуть больше контекста?
Каким образом открываются Screen2? Открыт ли он в диалоге?
В чем заключается конечная цель подписки на изменение значения в другом экране?
В вашем случае, возможно, правильнее будет получить конечные значения компонентов на Screen2 (4 чекбоксов), а затем, с их помощью конфигурировать SourceCodeEditor?
@d.kremnev изменил подход, поэтому предыдущий вопрос не актуален) Но появился другой вопрос: как можно настроить поведение в этом окне, чтобы, если все чекбоксы НЕ выбраны, кнопка “Сформировать” становится неактивной? А если выбран хоть один, то становится активной?
Я попробовал вот так, но не сработало:
@Subscribe
public void onAfterInit(AfterInitEvent event) {
if (!constraintCheckBox.isChecked() && !indexCheckBox.isChecked() && !triggerCheckBox.isChecked() && !deleteCheckBox.isChecked()) {
okButton.setEnabled(false);
}
}