将值返回到"opener"的 GWT 对话框



我想创建一个弹出窗口(作为对话框或其他类似组件实现),我应该能够在多个页面或表单中重复使用。我希望对话框能够向"打开器"返回一个值。

我在想,即在显示表格(通过 RPC 获得)的对话框中。该对话框可以在几个不同的页面中使用。当用户选择一行时,对象将"传递回页面"(例如,对其调用方法),因此它可以将其写入表单域,或对其执行任何操作。被调用者对 de DialogBox 中的逻辑一无所知,只知道如何处理返回类型。

我打算做的一个很好的例子可能是返回java.util.Date的DatePicker。

你做过类似的事情吗?我感谢您的帮助。谢谢!大卫

这真的很容易。您应该首先创建一个接口,该接口将由您DialogBox打开的所有页面实现:

public interface DialogBoxOpener {
    void dialogBoxValidated (Date selectedDate);
    void dialogBoxCancelled ();
}

然后,创建您的DialogBox,并将DialogBoxOpener作为showDialogBox方法的参数:

public class MyDialogBox extends DialogBox {
    private DialogBoxOpener opener = null;
    private final Button cancelButton = new Button("Cancel");
    private final Button validButton = new Button("Ok");
    private final DateBox myDateBox = new DateBox();
    public MyDialogBox () {
            cancelButton.addClickHandler(new ClickHandler () {
                    @Override
                    public void onClick(final ClickEvent event) {
                            hide();
                            if (opener!=null)
                                    opener.dialogBoxCancelled();
                    }
            });
            validButton.addClickHandler(new ClickHandler () {
                    @Override
                    public void onClick(final ClickEvent event) {
                            hide();
                            if (opener!=null)
                                    opener.dialogBoxValidated(myDateBox.getValue());
                    }
            });
            // TODO : create your DialogBox
    }
    public void showDialogBox (final DialogBoxOpener opener) {
            this.opener = opener;
            // Show the DialogBox
            center ();
    }
}

现在,您可以从页面显示您的DialogBox

public class MyPage implements DialogBoxOpener {
    private MyDialogBox myDialogBox = getMyDialogBox();
    private void openDialogBox () {
            myDialogBox.showDialogBox(this);
    }
    public void dialogBoxValidated (Date selectedDate) {
            // TODO : Do something with the date
    }
    public void  dialogBoxCancelled () {
            // TODO : Do something
    }
}

相关内容

  • 没有找到相关文章

最新更新