为什么setDefaultErrorHandler在vaadin流中使我的视图崩溃?
我在Vaadin流中为UI编写了自己的自定义错误处理程序。但是当我抛出异常时,我的视图会崩溃,并且不会显示人类可读的错误消息 我在使用Vaadin 8的其他应用程序中实现了这一点,效果非常好。这个想法在我的后端服务中引发了一个SGIEException,比如:为什么setDefaultErrorHandler在vaadin流中使我的视图崩溃?,vaadin,vaadin-flow,Vaadin,Vaadin Flow,我在Vaadin流中为UI编写了自己的自定义错误处理程序。但是当我抛出异常时,我的视图会崩溃,并且不会显示人类可读的错误消息 我在使用Vaadin 8的其他应用程序中实现了这一点,效果非常好。这个想法在我的后端服务中引发了一个SGIEException,比如: 找不到产品 字段“XXX”的值不正确 该产品没有可用库存 等等 然后显示系统通知 public static void setDefaultErrorHandler(ErrorEvent errorEvent) {
- 找不到产品
- 字段“XXX”的值不正确
- 该产品没有可用库存
- 等等
public static void setDefaultErrorHandler(ErrorEvent errorEvent) {
Throwable t = DefaultErrorHandler.findRelevantThrowable(errorEvent.getThrowable());
String message;
if (t != null) {
message = t.getMessage();
} else {
message = "";
}
log.error(message, t);
SgiException sgiException = getCauseOfType(t, SgiException.class);
if (sgiException != null) {
NotificationBuilder.exception(sgiException.getCode(), sgiException.getMessage());
return;
} else {
NotificationBuilder.exception(UNKNOW_ERROR, (message == null ? "" : message));
return;
}
}
private static <T extends Throwable> T getCauseOfType(Throwable th, Class<T> type) {
while (th != null) {
if (type.isAssignableFrom(th.getClass())) {
return (T) th;
} else {
th = th.getCause();
}
}
return null;
}
在视图中显示以下内容:
注意:
调试应用程序时,看到它正在运行的代码,就会看到它出于某种原因调用的方法没有显示通知
这是一种恶劣的行为,目前在瓦丁10中是无法克服的。关注并投票(竖起大拇指或发表评论)这个问题以解决它:这是一种恶劣的行为,目前在Vaadin 10中无法被推翻。关注并投票(竖起大拇指或发表评论)此问题以解决:
@PostConstruct
public void configBaseView() {
VaadinSession.getCurrent().setErrorHandler(Util::setDefaultErrorHandler);
}