Java 使用BeforeEnterObserver重定向到外部URL
我想使用BeforeEnterObserver接口重定向到外部页面 这是我的密码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
@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(..)