0

私の MainPresenter には、ボタン列を持つ CellTable があります。ボタンを押すと、プレゼンターは「addToPopupSlot(editPopup, true)」を呼び出します。editPopup が表示され、そこで行うことができるいくつかの設定が表示されます。ポップアップ ビューで保存ボタンを押すと、MainPresenter の CellTable が取得したいデータがデータベースに送信されます。

私の問題は次のとおりです。保存ボタンをクリックしても、テーブルが更新されません。ページを更新するか、別のプレゼンターから 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();

    }
});
}

MainPresenter の editColumn (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);
4

1 に答える 1

0

ここにいくつかの解決策があると思います。私があなたなら、次のステップを実行します。

  1. MainPresenter でイベントのリスナーを作成します。
  2. DB の更新が完了したら (ポップアップで [保存] を押した後); イベントを発生させます。
  3. MainPresenter がイベントを受け取ると、DB に移動してデータをフェッチします (getVisibleRange() を使用してフィルタリングします)。
  4. setRowData(...) メソッドを使用して CellTable を更新します (引数を正しく渡します)。

他のオプションは、CellTable に関連付けられた ListDataProvider を作成し、その上で refresh を呼び出すことです。

于 2013-06-06T10:55:30.543 に答える