Wicket 1.5 Servlet API依赖性

问题描述 投票:1回答:1

我们现在将一些古老的项目从Wicket 1.3.5迁移到一些较新的版本。在1.4.23版中,一切都变得差不多了。当我们开始向1.5.16迁移时,就会出现问题。最后,我创建了简单的测试应用程序来解决问题。但是,即使是简单的两页应用程序也没有按设计进行操作,这让我感到惊讶-它使用setResponsePage()在简单的更改页面上显示404

这里有一些测试应用程序代码,我的调试步骤和一些想法。

ApplicationClass代码:

public class WicketTestApplication extends WebApplication {

  public WicketTestApplication() {
    super();
  }

  public static WicketTestApplication get() {
    return (WicketTestApplication) Application.get();
  }

  @Override
  public Class<? extends Page> getHomePage() {

    return FirstPage.class;
  }

  protected void init() {
    super.init();

    getResourceSettings().getStringResourceLoaders().add(new ComponentStringResourceLoader());
    getResourceSettings().getStringResourceLoaders().add(new ClassStringResourceLoader(this.getClass()));
    getResourceSettings().setUseDefaultOnMissingResource(true);
    getResourceSettings().getLocalizer().setEnableCache(false);
    getMarkupSettings().setCompressWhitespace(true);
    getMarkupSettings().setStripComments(true);
    getMarkupSettings().setStripWicketTags(true);
    getDebugSettings().setAjaxDebugModeEnabled(true);
    getRequestCycleSettings().setResponseRequestEncoding("UTF-8");
    getRequestCycleSettings().setRenderStrategy(RenderStrategy.REDIRECT_TO_BUFFER);
  }
}

FirstPage.class代码:

public class FirstPage extends MainPage {

  public FirstPage() {

    Form form = new Form("formId");
    add(form);

    WebMarkupContainer message = new WebMarkupContainer("message");
    form.add(message);

    AjaxButton nextBtn = new AjaxButton("nextBtn", new CompoundPropertyModel<String>("Next Page")) {

      private static final long serialVersionUID = 1L;

      @Override
      public void onSubmit(AjaxRequestTarget target, Form<?> form) {

        RequestCycle.get().setResponsePage(SecondPage.class);
      }
    };
    form.add(nextBtn);
  }
}

SecondPage与第一个完全相同。 MainPage仅包含几个空白面板,因此此处无关紧要。

关于问题-单击按钮调用重新分配方法并调用了必要的页面构造函数,在此阶段,每件事看起来都很好,但是浏览器有另一种意见:)对他来说,这是以下树步骤:

  • 第一个请求(btn-onClick,ajax)正常处理并重定向到“ http:// localhost:9082 / testapp / wicket / bookmarkable / com.SomePackage.SecondPage”

  • 第二个请求也已处理好并重定向到“ http:// localhost:9082 / testapp / com.SomePackage.SecondPage?2”

  • 最后对上述地址的第三个请求失败。

但是如果通过在其中添加“ wicket / bookmarkable”结构手动更正URL,我仍然可以获得页面。我开始寻找有关此类行为的信息,但一无所获。每一篇文章都说它应该工作开箱即用。我花了大量的时间在使用Mappers,Handlers和/或RenderStrategies。在这里,我可以注意到,对于RenderStrategy为REDIRECT_TO_RENDERONE_PASS_RENDER的情况,一切正常。但这并不是真正的“即取即用”,因为我们知道默认的渲染策略是REDIRECT_TO_BUFFER

虽然我感到有些绝望,但我尝试从这些数不清的“检举示例文章”之一创建另一个测试项目。这次,我复制了带有“ web.xml”内容的整个代码,并为其创建了另一个WebShere Liberty Profice实例。这次面临工作。在比较了两个应用程序的每一部分之后,我发现只有服务器功能有所不同,即Servlet API。我的问题是因为我使用的旧实例具有jsp-2.2功能,该功能假定Servlet API 3.0版本。只要3.1都可以。

官方文档says

此Wicket版本至少需要以下Servlet API版本:Servlet API 2.5或更高版本。这是由您的容器提供的,请参阅容器的文档以了解哪个版本支持Servlet规范。

所以这是一个问题-我错过了什么,或者Wicket确实只需要Servlet API 3.1和(也许)更新?

P.S。>>是的,我知道1.5.X版本已经过时了。这只是我们升级到第七名的一步。

我们现在将一些古老的项目从Wicket 1.3.5迁移到一些较新的版本。在1.4.23版中,一切都变得差不多了。当我们开始向1.5.16迁移时,就会出现问题。最后...

java servlets wicket wicket-1.5
1个回答
1
投票

Wicket 1.5应该可以在Servlet 2.5上正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.