Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 防止用户将未保存的表单留给smartgwt_Java_Javascript_Smartgwt - Fatal编程技术网

Java 防止用户将未保存的表单留给smartgwt

Java 防止用户将未保存的表单留给smartgwt,java,javascript,smartgwt,Java,Javascript,Smartgwt,现在我正在一个大型smartgwt项目中工作。我需要实现一个很好的功能,但我不知道怎么做 我们的应用程序在不同的选项卡和网格中有很多表单,等等。每个表单都有自己的保存按钮,当按下按钮时,它会在保存操作之前执行一些操作。对于应用程序来说,只有当用户按下按钮时才保存表单是非常重要的。我需要的是某种处理程序来防止用户留下未保存的表单。我的意图是显示某种警告弹出窗口,但我不知道如何绑定该操作 我不知道是否可以用smartgwt做类似的事情,但在我看来,这是大型web应用程序中的一个非常典型的功能 一些想

现在我正在一个大型smartgwt项目中工作。我需要实现一个很好的功能,但我不知道怎么做

我们的应用程序在不同的选项卡和网格中有很多表单,等等。每个表单都有自己的保存按钮,当按下按钮时,它会在保存操作之前执行一些操作。对于应用程序来说,只有当用户按下按钮时才保存表单是非常重要的。我需要的是某种处理程序来防止用户留下未保存的表单。我的意图是显示某种警告弹出窗口,但我不知道如何绑定该操作

我不知道是否可以用smartgwt做类似的事情,但在我看来,这是大型web应用程序中的一个非常典型的功能


一些想法?以前有人遇到过这个问题?

您几乎可以拦截GWT中的每个用户操作。例如,如果您想阻止用户离开页面,可以使用以下方法:

Window.addWindowClosingHandler(new Window.ClosingHandler() {
    @Override
    public void onWindowClosing(ClosingEvent event) {
        if (unsavedData) {
            event.setMessage("There is unsaved data. Do you really want to leave?");
        }
    }
});
若你们想让用户停止不同的操作,比如关闭标签,你们也可以通过添加合适的事件监听器来完成

确定是否有一些未保存的数据也相当简单,但取决于UI组件。 例如,在listGrid中,可以使用listGrid.getAllEditRows().Length 在表单中,您可以比较form.getOldValues()和form.getValues()(Guava库非常适合此任务:Maps.difference(form.getOldValues(),form.getValues()).areEqual())也许有更好的方法检查表单中未保存的数据,但我不知道

最后一个问题是,将所有这些联系在一起。我创建了具有多个保存参与者的自定义保存控制器。通过这种方法,您可以询问controller.isThereAnyUnsavedData()和controller应该询问每个参与者