Vaadin 8.4.0 Модал для подтверждения сохранения после сохранения в сеточном буфере - PullRequest
0 голосов
/ 03 мая 2018

Мы используем сетку для представления некоторых данных. В этой сетке не используется поставщик данных, а задаются его элементы.

Мы работаем над буферизованным модом, но мы все еще хотим показать модал, информирующий о том, что мы собираемся сохранить, с возможностью сохранить или отменить.

Метод SaveEditor был удален из класса сетки в нашей текущей версии (8.4.0), поэтому не могу сделать это таким образом.

Я пришел к близкому решению, но с некоторыми остающимися проблемами. Я расширил компонент сетки, чтобы иметь возможность создавать свой собственный редактор:

public class MyGridComponent extends Grid<MyData> {

public MyGridComponent (Class<MyData> beanType) {
    super(beanType);
}

@Override
protected Editor<MyData> createEditor() {
    return new MyGridEditor(this.getPropertySet());
}

}

В моем редакторе я переопределил следующие методы:

@Override
protected void doEdit(OutcomeWagerLimit bean) {
    copyMyBean = bean;
    super.doEdit(bean);
}

@Override
public boolean save() {
    String desc = copyMyBean.getDescription();

    StringBuilder captionBuilder = new StringBuilder()
            .append("Save ")
            .append(desc)
            .append("?");
    StringBuilder messageBuilder = new StringBuilder()
            .append("Do you really want to save ")
            .append(desc)
            .append("?");

    openConfirmMsgBox(captionBuilder.toString(), messageBuilder.toString(),() -> super.save(), ()->super.cancel());
    return true;
}

С этим кодом нажатие на кнопку Сохранить открывает модальное подтверждение. Если нажать «Сохранить», все работает безупречно, но нажатие на мою модальную отмену, которая вызовет метод EditorImpl.cancel (), действует странным образом. Нажатие кнопки «Отмена» на моем модале закроет режим редактирования, но если я снова отредактирую любую другую строку (дважды щелкнув по ней), кнопки сохранения и отмены сетки (кроме модальных) перестанут работать. Не запускать никаких запросов от клиента к сервлету vaadin.

Кто-нибудь знает какое-либо возможное решение этого или лучший способ достичь того, чего я пытаюсь достичь?

Заранее спасибо

1 Ответ

0 голосов
/ 04 мая 2018

Утро

Просто удалось это сделать. Поскольку я не использую dataprovider, а обычный список, я отвечаю за сохранение данных в другом saveEventListener. Это тот момент, когда нужно представить модал и, если все в порядке, сохранить его в базе данных.

Таким образом, нет необходимости переопределять метод сохранения EditorImpl и делать это в saveEventListener.

Спасибо

...