1

それを行う方法はありますか?

実装された RequestCycle について聞いたことがありますが、それを達成するにはどうすればよいですか?

Wicket 1.5 でRequestCycleから responsePage を取得するにはどうすればよいですか? これは、動作しません。

4

2 に答える 2

2

PageExpiredExceptionWicket で が表示されるのは、Wicket がページを見つけられないためです。利用できなくなったページの種類を特定する方法はありません。そのページは実際にはもう存在しないからです。それは存在しなくなり、その製作者に出会い、命を失い、安らかに眠り、そのライフサイクルは今や「歴史」であり、バケツを蹴った. 元ページです。

したがって、Wicket の唯一の手段は を提供することPageExpiredExceptionであり、復活を試みたページを (Wicket 自体で) 取得する方法はありません。

ここでできることは、最後にレンダリングされたページのクラスをセッションに保存し、それを onException() の RequestCycleListener 実装で使用して、適切なリクエスト ハンドラーを返すことです。コード内:

@Override
public void onRequestHandlerExecuted(RequestCycle cycle, IRequestHandler handler) {
    Class<? extends Page> p = null;

    if(handler instanceof IPageRequestHandler)
        p = ((IPageRequestHandler)handler).getPageClass();
    else if(handler instanceof IComponentRequestHandler)
        p = ((IComponentRequestHandler)handler).getComponent().getPage().getClass();

    MySession.get().setLastPageClass(p);
}

@Override
public IRequestHandler onException(RequestCycle cycle, Exception ex) {
    Class<? extends Page> pageClass MySession.get().getLastPageClass();
    ... return some handler based on your logic
}

でさらにIRequestHandler の実装を確認することをお勧めしonRequestHandlerExecutedます。

于 2013-08-05T20:48:18.183 に答える
1

私が正しく理解している場合、pageExpired が特定のページから発生した場合にのみユーザーをリダイレクトしたいですか? アプリケーションの実装で次のようなことを試すことができます。

getRequestCycleListeners().add(new AbstractRequestCycleListener() {
   @Override
   public IRequestHandler onException(RequestCycle cycle, Exception e) {
      if(e.getClass().equals(PageExpiredException.class)) {
         //check if url in request responds to correct mounted page type
         if(isPageUrl(cycle.getRequest().getUrl()))) {
            return new RenderPageRequestHandler(new PageProvider(MyPage.class));
         } else {
            return super.onException(cycle, e);
         }
      } else {
         return super.onException(cycle, e);
      }
   }
}

これは、例外が発生したページがマウントされていること、およびリクエスト URL を解析してそれがそれであることを確認できることを前提としています。私はそれをテストしていませんが、私たちは似たようなことをしています。

于 2013-08-06T09:00:10.897 に答える