首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vaadin 7和浏览器url更新

Vaadin 7和浏览器url更新
EN

Stack Overflow用户
提问于 2016-07-17 17:12:33
回答 2查看 985关注 0票数 3

我的Vaadin 7应用程序不会对浏览器url的更改做出反应。例如,我从键盘上输入一个新的url参数,然后按Enter键,之后什么都没有改变。

应用程序只对F5或页面刷新按钮作出反应。

如何使Vaadin 7应用程序在url更新后响应输入键?

更新

我正在使用Vaadin com.vaadin.navigator.Navigator对象。

例如,我有一个url:http://example.com/#!products/30970

当我更改浏览器地址栏中的url (例如,到http://example.com/#!products/34894)并按enter键时,我希望在我的页面上更改信息,以便用id 34894来显示有关产品的信息,而不是使用先前的id 30970的产品。

Vaadin Navigator和UriFragmentChangedListener

现在,我正在使用Vaadin Navigator来定义视图:

代码语言:javascript
复制
    Navigator navigator = new Navigator(this, viewDisplay);

    navigator.addView("products", ProductView.class);

在web浏览器中,我第一次成功地使用产品id参数访问此视图,例如通过以下url:

代码语言:javascript
复制
http://example.com/#!products/30970

ProductView是第一次构造的,在它的public void enter(ViewChangeListener.ViewChangeEvent event)方法中,我可以获得uri参数。

但在此之后,当我将此url中的web浏览器地址栏中的产品id更改为另一个(例如,为了显示另一个产品的信息而将其更改为30971 ):

代码语言:javascript
复制
http://example.com/#!products/30971

然后按Enter键,视图就不会刷新,并且不会对这些更改做出反应。

正如注释中所建议的那样,我添加了UriFragmentChangedListener侦听器,并且现在至少能够处理URL片段的更改(在输入键提示之后)。

现在,我的逻辑必须对这些变化做出反应,我正在寻找一种正确的方法,在Vaadin 7.中实现它。

因此,如果我正确地理解了--除了Navigator逻辑之外,我还必须使用这个侦听器,而在这个侦听器逻辑中,我必须获得一个关于适当视图的引用(navigator.getCurrentView() ?)对象,并在此对象上调用某种方法来更改内部视图状态,而不重新生成完整视图?如果我是对的--为了简化这个工作,Vaadin有什么标准的机制吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-18 10:58:57

除了手动将UriFragmentChangeEvent传递给您的视图之外,我想不出其他的方法。我想Vaadin不能自动完成它。

代码语言:javascript
复制
public class MyUI extends UI{

    @Override
    protected void init(final VaadinRequest request) {

        /*
         * UriFragmentChangedListener
         * when URL+Parameter manuell eingegeben werden 
         */
        getPage().addUriFragmentChangedListener(new UriFragmentChangedListener() {

            @Override
            public void uriFragmentChanged(UriFragmentChangedEvent event) {

                View currentView = getNavigator().getCurrentView();
                if(currentView != null){

                    if(currentView instanceof UriFragmentChangedListener){
                        ((UriFragmentChangedListener)currentView).uriFragmentChanged(event); //custom method
                    }

                }
            }
        });
    }
}

要完成这项工作,请将UriFragmentChangedListener添加到ProductView中:

代码语言:javascript
复制
public class ProductView extends CustomComponent implements View, UriFragmentChangedListener {

}
票数 2
EN

Stack Overflow用户

发布于 2016-07-18 10:10:24

查看ViewChangeEvent of您的ProductView中的参数

通过使用这个url结构"http://example.com/#!products/30970",您可以如下所示读取产品id:

代码语言:javascript
复制
@Override
public void enter(ViewChangeEvent event) {

    String productId = event.getParameters();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38423836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档