【发布时间】:2016-07-17 17:12:33
【问题描述】:
我的 Vaadin 7 应用程序对浏览器 URL 更改没有反应。例如,我从键盘输入一个新的 url 参数并按 Enter 键,之后没有任何变化。
应用程序仅对 F5 或页面刷新按钮作出反应。
如何让 Vaadin 7 应用程序在 url 更新后响应 Enter 键?
更新
我正在使用 Vaadin com.vaadin.navigator.Navigator 对象。
例如我有一个网址:http://example.com/#!products/30970
当我更改浏览器地址栏中的 url(例如更改为 http://example.com/#!products/34894)并按回车键时,我想更改页面上的信息,以便显示有关 id 为 34894 的产品的信息,而不是以前 id 的产品30970.
Vaadin Navigator 和 UriFragmentChangedListener
现在我正在使用 Vaadin Navigator 来定义视图:
Navigator navigator = new Navigator(this, viewDisplay);
navigator.addView("products", ProductView.class);
第一次在网络浏览器中,我可以使用产品id 参数成功访问此视图,例如通过以下网址:
http://example.com/#!products/30970
ProductView 是第一次构造的,在其public void enter(ViewChangeListener.ViewChangeEvent event) 方法中,我能够获取 uri 参数。
但在那之后,当我将此网址中的网络浏览器地址栏中的产品ID更改为另一个时(例如更改为30971以显示另一个产品的信息):
http://example.com/#!products/30971
然后按 Enter 键,视图不会刷新并且不会对这些更改做出反应..
按照 cmets 中的建议,我添加了 UriFragmentChangedListener 监听器,现在至少能够处理 URL 片段更改(按 Enter 键后)。
现在,我的逻辑必须对这些变化做出反应,我正在寻找一种正确的方式,应该如何在 Vaadin 7 中实现它。
所以,如果我理解正确 - 除了导航器逻辑之外,我还必须使用此侦听器,并且在此侦听器逻辑内部,我必须获取有关适当视图(navigator.getCurrentView()?)对象的引用并对此调用一些方法对象以更改内部视图状态而无需重建完整视图?如果我是正确的 - Vaadin 中是否有一些标准机制来简化这项工作?
【问题讨论】:
-
您使用的是navigator、FragmentChangeListener 还是RequestHandler?请提供更多详细信息,并可能显示一些代码并解释您希望它的行为方式。
-
@Morfic 我已经用更详细的信息更新了我的问题
-
您是否添加了一个监听 URL 变化的监听器?这可能也有帮助vaadin.com/docs/-/part/framework/advanced/advanced-urifu.html
-
@AndréSchild 谢谢,我已经添加了这个监听器,现在至少能够处理 URL 片段的变化。所以,如果我理解正确 - 在这个基于 URI 片段的侦听器内部,我需要获取对适当视图(navigator.getCurrentView() ?)对象的引用并在该对象上调用一些方法,以便在没有完整视图的情况下更改内部视图状态重建?如果我是正确的 - Vaadin 中是否有一些标准机制来简化这项工作?
-
@alexanoid 通常你要么使用导航器(但你必须告诉导航器每个 URL)或者你自己处理片段