我为 Vaadin 流程中的 UI 编写了自己的自定义错误处理程序。但是当我抛出异常时,我的视图崩溃并且不显示我的人类可读的错误消息。
我在使用 Vaadin 8 的其他应用程序中做到了这一点,并且运行良好。这个想法在我的后端服务中引发了 SgiException,例如:
- 未找到产品
- 字段“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;
}
这就是我设置自定义错误处理程序的方式:
@PostConstruct
public void configBaseView() {
VaadinSession.getCurrent().setErrorHandler(Util::setDefaultErrorHandler);
}
在视图中显示:
注意: 调试应用程序,查看它正在运行的代码,查看它调用的方法,由于某种原因没有显示通知。