在 Vaadin 中,我想在页面重新加载后显示通知:
UI.getCurrent().getPage().reload();
new Notification("Success", 5000).open();
但是通过此尝试,不会显示任何通知。 这里有什么问题以及如何解决它?
虽然显示通知看起来非常必要,但这仍然是一部分 UI 的状态;所以当你重新加载时,你基本上是在(重新)创建一个新的 状态,其中通知不属于其中。
您必须向“新”用户界面发出信号,表明您想要完成某些操作。
实现此目的的一种方法是在会话中存储一个标记(其中所有 UI 都在会话中) 部分)。然后在组件上使用观察者(或整个组件的侦听器) 应用程序),以便在导航完成时解决通知。
例如
@Route(value = "", layout = MainLayout)
@SuppressWarnings('unused')
class MainView extends Composite<Div> implements AfterNavigationObserver {
public static final String RELOADED_KEY = 'reloaded'
MainView() {
content.add(
new Button("Reload and notify", {
getUI().get().tap {
getSession().setAttribute(RELOADED_KEY, true)
getPage().reload()
}
})
)
}
@Override
void afterNavigation(AfterNavigationEvent afterNavigationEvent) {
def session = getUI().get().getSession()
if (session.getAttribute(RELOADED_KEY)) {
session.setAttribute(RELOADED_KEY, false)
Notification.show('Reloaded...')
}
}
}