InputDialog и ClipboardTrigger

Пытаюсь использовать InputDialog и ClipboardTrigger совместно и столкнулся со следующими сложностями:

  1. При вот такой инициализации:
            final InputDialog dialog = dialogs.createInputDialog(frameOwner)
                    .withCaption("Copy URL to clipboard")
                    .withParameter(InputParameter.stringParameter("urlParameter")
                            .withField(() -> {
                                final WebTextField<Object> textField = new WebTextField<>();
                                textField.setCaption("URL");
                                textField.setValue(url);
                                textField.setEditable(false);
                                textField.setWidthFull();
                                return textField;
                            }))
                    .withActions(InputDialogAction
                            .action("copyAction")
                            .withCaption("Copy URL")
                            .withHandler(inputDialogActionPerformed -> inputDialogActionPerformed.getInputDialog().close(FrameOwner.WINDOW_CLOSE_ACTION)))
                    .show();

Получают странный результат:
image
Ожидаю, что оба метода вернут один и тот же объект.

  1. Кнопка, связанная с InputDialogAction вообще создается без ID и отсутствует метод ее получения (может не нашел?). Сейчас перебираю все компоненты диалога и получаю первую (благо она одна).

Если ваш диалог сложнее пары полей и нужно его кастомизировать, то не стоит использовать InputDialog. Создайте обычный экран.

В том-то и дело, что не сложнее… Одно поле и одна кнопка.
Было бы по паре, задача уже не решаемая.

Здравствуйте, Михаил!

  1. Всё верно, когда Вы использовали InputParameter#getField() он вернул Supplier. У этого Supplier-a вызывается метод get(), который заново создаст WebTextField.

  2. Спасибо, что указали на проблему. Да, кнопки должны создаваться с id. Завёл задачу: cuba-platform/cuba#2440

Методы получения компонентов не реализованы в самом билдере и InputDialog экране, поскольку они доступны из Screen#getWindow() или InputDialog#getDialogWindow().

2 симпатии