Доступ к объекту страницы калитки вне иерархии компонентов калитки

У меня есть классы 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().

Другие вопросы по тегам