【问题标题】:Redirect to external URL using BeforeEnterObserver使用 BeforeEnterObserver 重定向到外部 URL
【发布时间】:2020-11-01 17:19:34
【问题描述】:

我想使用 BeforeEnterObserver 接口重定向到外部页面

这是我的代码

@Route(value = "hello", layout = MainView.class)
@PageTitle("Shortener")
@CssImport("./styles/views/helloworld/hello-world-view.css")
@RouteAlias(value = "", layout = MainView.class)
public class HelloWorldView extends Div implements BeforeEnterObserver{

    private TextField name;
    private H1 mainTitle;
    private String parameter = "";

    public HelloWorldView() {
        setId("hello-world-view");
        
        //some code here
        
    }

    @Override
    public void beforeEnter(BeforeEnterEvent event) {
        
        getUI().get().getPage()
               .executeJavaScript("window.location.href = 'https://www.google.com/'");
        
    }


}

我收到此错误消息

java.util.NoSuchElementException: No value present
at java.base/java.util.Optional.get(Optional.java:141) ~[na:na]
at com.example.application.views.helloworld.HelloWorldView.beforeEnter(HelloWorldView.java:70) ~[classes/:na]
at com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.sendBeforeEnterEvent(AbstractNavigationStateRenderer.java:606) ~[flow-server-4.0.4.jar:4.0.4]

似乎getUI方法返回一个空对象,有没有不使用getUI方法重定向到外部网站的方法?

【问题讨论】:

  • Seems getUI method return a null object,这会引发 NPE。堆栈跟踪中有什么更有趣的吗? beforeEnter(HelloWorldView.java:70)这是哪一行?
  • 你试过event.getUI()吗?
  • 感谢@cfrick,我使用了 event.getUI() 方法并且它有效

标签: java vaadin vaadin-flow


【解决方案1】:

正如前面提到的 cfric,我使用了 event.getUI(),它按预期工作

@Override
public void beforeEnter(BeforeEnterEvent event) {
    
    //event.forwardTo("https://www.youtube.com");
    //urlurlevent.rerouteTo("about");
    event.getUI().getPage().setLocation("https://www.google.com/");
    
}

【讨论】:

  • 实际上您不需要为此调用 JavaScript,因为 Page 有用于设置位置的 API,即.. getPage().setLocation(..)
猜你喜欢
  • 1970-01-01
  • 2017-12-11
  • 2012-01-10
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 2016-03-27
  • 2019-04-03
相关资源
最近更新 更多