Vaadin 瓦丁10+;:如何处理未捕获的异常?
在瓦丁8:Vaadin 瓦丁10+;:如何处理未捕获的异常?,vaadin,vaadin10,Vaadin,Vaadin10,在瓦丁8: UI.getCurrent().setErrorHandler(e -> handleError(e)); setErrorHandler在Vaadin 11中不存在,我找不到相应的方法或文档。在Flow(Vaadin 10+)中,有一种机制可以捕获路由器中未捕获的异常。所以您可以创建错误视图,在捕获定义的异常时显示错误视图。它们是通过实现带有异常类型的HasErrorParameter接口创建的。以下是Vaadin文档中的一个示例: @Tag(Tag.DIV) public
UI.getCurrent().setErrorHandler(e -> handleError(e));
setErrorHandler
在Vaadin 11中不存在,我找不到相应的方法或文档。在Flow(Vaadin 10+)中,有一种机制可以捕获路由器中未捕获的异常。所以您可以创建错误视图,在捕获定义的异常时显示错误视图。它们是通过实现带有异常类型的HasErrorParameter接口创建的。以下是Vaadin文档中的一个示例:
@Tag(Tag.DIV)
public class RouteNotFoundError extends Component
implements HasErrorParameter<NotFoundException> {
@Override
public int setErrorParameter(BeforeEnterEvent event,
ErrorParameter<NotFoundException> parameter) {
getElement().setText("Could not navigate to '"
+ event.getLocation().getPath() + "'");
return HttpServletResponse.SC_NOT_FOUND;
}
}
@Tag(Tag.DIV)
公共类RouteNotFoundError扩展组件
实现HasErrorParameter{
@凌驾
public int setErrorParameter(BeforeEnterEvent事件之前,
ErrorParameter(参数){
getElement().setText(“无法导航到“””
+event.getLocation().getPath()+“”);
返回HttpServletResponse.SC\u未找到;
}
}
我建议阅读更多文档
对于不是路由/导航期间发生的错误,而是例如单击时发生的错误的情况,有Vaadin Session::setErrorHandler。如果您使用的是Vaadin Spring Boot starter,则实现应如下所示:
@SpringComponent
public class MyVaadinServiceInitListener implements VaadinServiceInitListener {
@Override
public void serviceInit(ServiceInitEvent event) {
event.getSource().addSessionInitListener(e -> {
e.getSession().setErrorHandler(errorEvent-> {
Throwable t = errorEvent.getThrowable();
// handle error
});
});
}
}
在Vaadin 10+中,有两个错误处理入口点:
- 路由器异常处理,在构建视图的导航阶段触发,以及
- 会话的ErrorHandler,在呈现视图后触发
有关详细信息,请参阅。谢谢。我在vaadin8中实现了一个自定义导航方案,所以我在vaadin11中没有使用路由器,而是使用VaadinServlet和UI。仍然在寻找一种在异常发生时向用户显示消息的方法。Reto,你有什么解决方案吗?你必须实现SessionInitListener,然后配置你的errorHandler…如何实现SessionInitListener?请参阅以获取帮助。我尝试了这种方法,但我没有发现错误。关于这个替代方案,你有更多的细节吗?这在瓦丁流中已经不可能了。