Java 使用BeforeEnterObserver重定向到外部URL

Java 使用BeforeEnterObserver重定向到外部URL,java,vaadin,vaadin-flow,Java,Vaadin,Vaadin Flow,我想使用BeforeEnterObserver接口重定向到外部页面 这是我的密码 @Route(value = "hello", layout = MainView.class) @PageTitle("Shortener") @CssImport("./styles/views/helloworld/hello-world-view.css") @RouteAlias(value = "", layout = Ma

我想使用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方法重定向到外部网站?

正如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/");
    
}

似乎getUI方法返回一个空对象,该对象将抛出一个NPE。堆栈跟踪中还有什么更有趣的东西吗
beforeEnter(HelloWorldView.java:70)
这是哪一行?你试过用
event.getUI()
来代替吗?谢谢@cfrick,我使用了event.getUI()方法,它确实有效,你不需要为此调用JavaScript,因为页面有用于设置位置的API,例如。getPage().setLocation(..)