在wicket组件层次结构之外访问Wicket页面对象

时间:2014-03-28 13:27:10

标签: java wicket wicket-1.6

我有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);

2 个答案:

答案 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所指出的那样。