我在Vaadin流中为UI编写了自己的自定义错误处理程序。但是当我抛出异常时,视图崩溃了,并且没有显示人类可读的错误消息。
我使用Vaadin 8在其他应用程序中做到了这一点,并且效果很好。这个想法在我的后端服务中抛出了SgiException,例如:
然后显示系统通知
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;
}
这是我设置自定义错误处理程序的方式:
@PostConstruct
public void configBaseView() {
VaadinSession.getCurrent().setErrorHandler(Util::setDefaultErrorHandler);
}
在视图中显示以下内容:
注意: 调试该应用程序,查看其运行的代码,查看由于某种原因其调用的方法未显示通知。
答案 0 :(得分:2)
这是一个令人讨厌的行为,目前在Vaadin 10中无法覆盖。请对此问题进行投票(竖起大拇指或发表评论)以解决此问题:https://github.com/vaadin/flow/issues/801