防止用户使用smartgwt离开未保存的表单

时间:2014-05-21 12:51:00

标签: java javascript smartgwt

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

我们的应用程序有很多表单,位于不同的标签和网格中,等等。每个表单都有自己的保存按钮,当它被按下时,它会在保存操作之前执行一些操作。对于应用程序,仅在用户按下按钮时保存表单非常重要。我需要的是某种处理程序,以防止用户离开未保存的表单。我的目的是显示某种警告弹出窗口,但我不知道如何绑定操作。

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

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

1 个答案:

答案 0 :(得分:0)

您可以拦截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()。lenght 在表单中,您可以将form.getOldValues()与form.getValues()进行比较(Guava库将非常适合此任务:Maps.difference(form.getOldValues(),form.getValues())。areEqual())也许有更好的方法来检查表单中未保存的数据,但我不知道。

最后一个问题 - 将它们连接在一起。我创建了多个保存参与者的自定义保存控制器使用这种方法,您可以询问controller.isThereAnyUnsavedData()和控制器应该询问每个参与者。