Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vaadin 瓦丁10+;:如何处理未捕获的异常?_Vaadin_Vaadin10 - Fatal编程技术网

Vaadin 瓦丁10+;:如何处理未捕获的异常?

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

在瓦丁8:

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,在呈现视图后触发
当服务器由于异常而无法生成视图时,会触发前一个。后者是由按钮单击、其他类型的组件事件以及UI.access()引发的异常触发的


有关详细信息,请参阅。

谢谢。我在vaadin8中实现了一个自定义导航方案,所以我在vaadin11中没有使用路由器,而是使用VaadinServlet和UI。仍然在寻找一种在异常发生时向用户显示消息的方法。Reto,你有什么解决方案吗?你必须实现SessionInitListener,然后配置你的errorHandler…如何实现SessionInitListener?请参阅以获取帮助。我尝试了这种方法,但我没有发现错误。关于这个替代方案,你有更多的细节吗?这在瓦丁流中已经不可能了。