Перерисовать CellTable из MainPresenter после того, как всплывающее окно скрыто

В моем MainPresenter есть CellTable со столбцом кнопок. Когда вы нажимаете кнопку, ведущий вызывает «addToPopupSlot (editPopup, true)». Появится editPopup с несколькими настройками, которые вы можете там сделать. После нажатия кнопки сохранения во всплывающем окне он отправляет данные в базу данных, которую хочет получить CellTable в MainPresenter.

Моя проблема: когда я нажимаю кнопку «Сохранить», таблица не обновляется. Мне нужно либо обновить страницу, либо перейти от другого Presenter обратно к MainPresenter.

EditPopupPresenter

 @Override
protected void onBind() {
super.onBind();
this.username = Cookies.getCookie("domusr");
// hours and minutes displayed in listboxes
for (int i = 0; i < TimeSettings.HOURS_RANGE; i++) {
    getView().getBeginHoursLBX().addItem(String.valueOf(i));
    getView().getEndHoursLBX().addItem(String.valueOf(i));
    getView().getPauseHoursLBX().addItem(String.valueOf(i));
}

for (int i = 0; i < 60; i += TimeSettings.MINUTES_RANGE) {
    getView().getBeginMinutesLBX().addItem(String.valueOf(i));
    getView().getEndMinutesLBX().addItem(String.valueOf(i));
    getView().getPauseMinutesLBX().addItem(String.valueOf(i));
}

getView().getSaveBTN().addClickHandler(new ClickHandler() {

    @Override
    public void onClick(ClickEvent event) {
    DateTimeFormat dtf = DateTimeFormat.getFormat("yyyy-MM-dd");
    final String startHours = getView()
        .getBeginHoursLBX()
        .getValue(
            getView().getBeginHoursLBX().getSelectedIndex());
    final String startMinutes = getView().getBeginMinutesLBX()
        .getValue(
            getView().getBeginMinutesLBX()
                .getSelectedIndex());
    final String endHours = getView().getEndHoursLBX().getValue(
        getView().getEndHoursLBX().getSelectedIndex());
    final String endMinutes = getView()
        .getEndMinutesLBX()
        .getValue(
            getView().getEndMinutesLBX().getSelectedIndex());
    final String pauseHours = getView()
        .getPauseHoursLBX()
        .getValue(
            getView().getPauseHoursLBX().getSelectedIndex());
    final String pauseMinutes = getView().getPauseMinutesLBX()
        .getValue(
            getView().getPauseMinutesLBX()
                .getSelectedIndex());
    final String projectId = getView().getProjectIdLBL().getText();
    final java.sql.Date date = new java.sql.Date(dtf.parse(
        getView().getDateLBL().getText()).getTime());
    dispatcher.execute(
        new InsertTimesIntoDB(Integer.parseInt(startHours),
            Integer.parseInt(startMinutes), Integer
                .parseInt(endHours), Integer
                .parseInt(endMinutes), Integer
                .parseInt(pauseHours), Integer
                .parseInt(pauseMinutes), Integer
                .parseInt(projectId), date, username),
        new AsyncCallback<InsertTimesIntoDBResult>() {

            @Override
            public void onFailure(Throwable caught) {

            }

            @Override
            public void onSuccess(InsertTimesIntoDBResult result) {

            }
        });

    getView().hide();

    }
});
}

editColumn в MainPresenter (onBind())

// edit column
    Column<Booking, String> editColumn = new Column<Booking, String>(
        new ButtonCell()) {
    @Override
    public String getValue(Booking booking) {
        return "edit";
    }
    };
    editColumn.setFieldUpdater(new FieldUpdater<Booking, String>() {

    @Override
    public void update(int index, Booking object, String value) {
        // pop up widget addToSlot call

        editPopup.getView().getDateLBL()
            .setText(String.valueOf(object.getFullDate()));
        editPopup.getView().getProjectIdLBL()
            .setText(String.valueOf(1234567));

        editPopup.getView().getBeginHoursLBX()
            .setItemSelected(object.getStartHours(), true);
        editPopup
            .getView()
            .getBeginMinutesLBX()
            .setItemText(
                minutesRange.getIndex(object
                    .getEndMinutes()),
                String.valueOf(object.getStartMinutes()));
        editPopup.getView().getEndHoursLBX()
            .setItemSelected(object.getEndHours(), true);
        editPopup
            .getView()
            .getEndMinutesLBX()
            .setItemText(
                minutesRange.getIndex(object
                    .getEndMinutes()),
                String.valueOf(object.getEndMinutes()));
        editPopup.getView().getPauseHoursLBX()
            .setItemSelected(object.getPauseHours(), true);
        editPopup
            .getView()
            .getPauseMinutesLBX()
            .setItemText(
                minutesRange.getIndex(object
                    .getEndMinutes()),
                String.valueOf(object.getPauseMinutes()));
        addToPopupSlot(editPopup, true);
    }
    });
    getView().getTimeTable().addColumn(editColumn);

person kArvee    schedule 06.06.2013    source источник


Ответы (1)


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

  1. Создайте прослушиватель событий в MainPresenter.
  2. Когда вы закончите обновлять свою БД (после нажатия кнопки «Сохранить» во всплывающем окне); Я бы запустил событие.
  3. Когда MainPresenter получает событие, вы переходите к БД и извлекаете данные (фильтруя их с помощью getVisibleRange()).
  4. Обновите CellTable с помощью метода setRowData(...) (правильно передав аргументы)

Другой вариант — создать ListDataProvider, ассоциированный с CellTable, и вызвать для него обновление.

person apanizo    schedule 06.06.2013
comment
спасибо, сделал это без событий. Просто добавил слушателя, прослушивающего звонок - person kArvee; 06.06.2013
comment
Я делал это точно так же, как и раньше, но вместо использования сеттера для слушателя я вводил обработчик в конструктор через gin, который выдал исключение - person kArvee; 07.06.2013