Доступ к объекту страницы калитки вне иерархии компонентов калитки
У меня есть классы pojo, которые обрабатывают мои серверные соединения. Я хочу инкапсулировать мою (внутреннюю) обработку ошибок в этих классах, перехватывая внутренние исключения.
Есть ли способ получить доступ к текущей странице калитки (или к любому другому компоненту), чтобы я мог оставить отзыв пользователю вне иерархии компонентов калитки?
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);
2 ответа
Там нет хорошего способа, и это не очень хорошая идея сделать это. Ваш интерфейс должен вызывать ваш бэкэнд не иначе. Поэтому самый простой способ сделать это - хранить ошибки в вашем сервисе и получать их на своей странице.
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();
}
}
или вы можете вернуть ошибку из вашего внутреннего метода или сгенерировать исключение и обработать это в своей веб-странице, или использовать IRequestCycleListener#onException(), как указано @svenmeier.
IRequestCycleListener#onException() - лучшее место для этого - вы можете получить доступ к текущей странице через RequestCycle#getActiveRequestHandler().