1

現在githubにフォークされているwicket-restプロジェクトは、wicket-1.5 では動作しません。

この問題はwicket メーリング リストで提起されましたが、未解決のままです。メーリング リストにある提案を試してみましたが、問題は解決しません。「onBeforeRender」メソッドは呼び出されないため、ウィケットレストの前処理は効果的にバイパスされます。

ステートレス ヒントが true に設定されている場合、「onBeforeRender」が呼び出されない可能性がありますか?

4

1 に答える 1

1

いくつかの調査の後、私はなんとかこの問題を解決し、これをコミュニティと共有することを考えました.

wicket-1.5 で API が変更されたため、wicket-rest-api クラスに次の変更が必要です。

  • AbstractWebServicePage (またはフォークした場合は同等) は、IMarkupResourceStreamProvider を実装する必要があります。実装は次のようになります: (メーリングリストから取得)

    @Override
    public IResourceStream getMarkupResourceStream(MarkupContainer container, Class<?> containerClass)
    {
        return new StringResourceStream("");
    }
    
  • 「hasAssociatedMarkup」は非推奨になり、AbstractWebServicePage から削除できます。

  • AbstractWebServicePage のオーバーライドされた「onBeforeRender」内で定義されたコードを「onBeforeRenderPage」という名前のメソッドに移動します。このメソッドは wicket api の一部ではありませんが、この場合「onBeforeRender」が何らかの理由で呼び出されないため、私たちが作成したものであることに注意してください。

    protected void onBeforeRenderPage()
    {
        HttpServletRequest servletRequest = (HttpServletRequest) getRequest().getContainerRequest();
        HttpServletResponse servletResponse = (HttpServletResponse) getResponse().getContainerResponse();
    
        String method = servletRequest.getMethod();
        logger.debug("Received a {} request from {}:{}", new Object[]{method, servletRequest.getRemoteAddr(),
                servletRequest.getRemotePort()});
    
        if (POST.equals(method)) {
            try {
                setModelFromBody(getRequestBody());
            } catch (Exception e) {
                //swallow this exception
            }
            doPost(getPageParameters(), servletRequest, servletResponse);
        } else if (GET.equals(method)) {
            doGet(getPageParameters(), servletRequest, servletResponse);
        }
    }
    
  • それぞれのサブクラス (JSON、Xml など) で、メソッド "onRender()" を "renderPage()" に置き換え、他の処理を行う前にカスタム作成のスーパー メソッド "onBeforeRenderPage" を呼び出します。次のようになります。

    @Override
    public final void renderPage()
    {
        super.onBeforeRenderPage();
        getResponse().write(getJson());
    }
    

以上で、今度は wicket-1.5 を使用して、エレガントな wicket-rest API をもう一度楽しむ準備が整いました。

私はこれをテストして使用しています。

より良い意見があれば、共有してください。

于 2012-08-27T07:52:30.523 に答える