我有pojo类来处理我的后端连接。我想通过捕获内部的后端异常来封装这些类中的(后端)错误处理。
有没有办法访问当前的wicket页面(或任何组件)以使我能够从wicket组件层次结构外部向用户提供反馈?
class MyService {
...
public void doBackEndThing(){
try {
backEndService.doRemoteCall();
} catch (BackendException e) {
//we're not inside the component hierarchy! so no getPage() available
WebPage page = getCurrentPage();
page.error("Backend is currently not available");
}
}
我已经尝试过PageManager,但我不知道如何检索正确的版本,所以我不知道是否可以使用:
int version = ?;
WebPage page = (WebPage )Session.get().getPageManager().getPage(version);
答案 0 :(得分:1)
IRequestCycleListener #onException()是一个更好的地方 - 你可以通过RequestCycle#getActiveRequestHandler()访问当前页面。
答案 1 :(得分:1)
没有一个很好的方法,这似乎不是一个好主意。你的前端不应该用另一种方式打电话给你的后端。因此,最简单的方法是将错误存储在服务中,让页面获取这些错误。
class MyService {
private String error;
public void doBackEndThing(){
try {
backEndService.doRemoteCall();
} catch (BackendException e) {
error ="Backend is currently not available";
}
}
}
和
class MyPage extends WebPage {
private MySerivce service;
public void doSomethingFrontendy() {
error = service.getError();
}
}
或者您可以从后端方法返回错误或抛出异常并在WebPage中处理它或使用IRequestCycleListener #onException(),如@svenmeier所指出的那样。