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