java - 瓦丁 7 : Identifying a "browser back button click" through ViewChangedEvent?

标签 java events vaadin

问题或多或少是标题所说的:我有一个实现 View 接口(interface)的 CustomView 类(因此,enter 函数采用 ViewChangeEvent 参数)。

我试图确定 View 更改何时由用户单击浏览器的“后退”按钮触发(与用户单击链接进入应用程序的 View 相反),但我无法确定到哪里(如果可能的话)获取此信息。

我在寻找正确的组件吗?我应该看看其他地方吗?有什么办法可以找到这方面的信息吗?

编辑:嗯,也许我可以在对 ViewChange 的每一次调用中添加一个自定义参数,这样我就可以“标记”“正常点击”并在没有它时识别“返回/前进”,但是这似乎是一个肮脏、丑陋的把戏......

最佳答案

好的,这将伴随一些故事,所以:

我找到了一种在 Vaadin 上识别“用户按下后退按钮”的方法,因为框架似乎通过 Page.updateLocation(String location, boolean fireEvents) 函数管理位置更改。不过,我还不能修改位置参数(这可能是由于 Vaadin 自己的体系结构或由于我自己的应用程序细节),所以我最终在 UI 类上使用了函数“changeVariables”(在继承、拥有、UI 类)以发送新的 ViewChangedEvent。

感觉有点像 hack,但正如我所说,我无法让它变得更好。


深入了解我的问题的具体细节,以防万一有人发现它有用,我需要以某种方式确定用户是通过“后退”浏览器按钮或“退格键”从不同的 View “返回” ,所以我决定在参数上使用一个标志来指示该 View 是“可恢复的”。该标志将有两个值:“retornable”(如“我刚刚进入 View ”)和“returning”(如“我刚刚回到可重载 View ”)。对于那些只看代码的人,这是 url 将显示的内容:

#!viewName/retflag=retornable&otherStuff=maybe
#!viewName/retflag=returning&otherStuff=perhaps

正如我所说,我的“入口点”位于扩展 UI 的“OurCustomUI”上,并具有以下小功能:

@Override
public void changeVariables(Object source, Map<String, Object> variables) {
    super.changeVariables(source, variables);       
}

在这里,想法是从变量 Map 中获取“location”变量并更新它。它会是这样的: myServer.myCompany.com/myApp/#viewName/retflag=retornable

因此代码将找到“retflag”值,将其更改为“returning”,创建 ViewChangedEvent 并触发它。由于某些原因,我需要在开头保留 super.changeVariables() 调用,但它似乎可以正常工作。

关于java - 瓦丁 7 : Identifying a "browser back button click" through ViewChangedEvent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48562479/

相关文章:

java - 无法使 gradle 导入 Lombok 依赖项

javascript - 如何使用 javascript 将滚动事件记录到控制台

javafx - JavaFX 和 Vaadin 的区别

java - Wicket vs Vaadin

java - 为什么 getElement().getProperty ("value") 不工作

java - 在 Web 应用程序中使用 ThreadPoolExecutor

java - 如何在亚马逊应用商店发布 Firebase 登录应用程序?

java - 创建自定义 gradle 插件

c++ - cpp/opengl 中的事件

java - Java中可以识别光标所在的字符串吗?