【问题标题】:wicket-rest does not work with wicket 1.5wicket-rest 不适用于 wicket 1.5
【发布时间】:2016-04-15 06:55:18
【问题描述】:

现已分叉到 githubwicket-rest 项目不适用于 wicket-1.5。

wicket mailing list 中已提出此问题,但仍未解决。我尝试了邮件列表中给出的建议,但问题仍然存在。没有调用“onBeforeRender”方法,因此有效地绕过了wicket-rest 预处理。

当无状态提示设置为 true 时,可能不会调用“onBeforeRender”?

【问题讨论】:

    标签: wicket wicket-1.5


    【解决方案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-rest api,这次使用的是 wicket-1.5。

    我已经对此进行了测试并使用它。

    如果你有更好的意见,请分享。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多