Java Wicket 1.5 Servlet API依赖关系

Java Wicket 1.5 Servlet API依赖关系,java,servlets,wicket,wicket-1.5,Java,Servlets,Wicket,Wicket 1.5,我们现在将一些古老的项目从Wicket 1.3.5迁移到一些较新的版本。在版本1.4.23中,一切或多或少都很清楚。问题出现在我们开始迁移到1.5.16时。最后,我创建了一个简单的测试应用程序来解决这个问题。但我感到惊讶的是,即使是简单的两页应用程序也没有达到它设计的目的——它在使用setResponsePage()的简单更改页面上显示了404 下面是一些测试应用程序代码、调试步骤和一些想法 应用程序类代码: public class WicketTestApplication extends

我们现在将一些古老的项目从Wicket 1.3.5迁移到一些较新的版本。在版本1.4.23中,一切或多或少都很清楚。问题出现在我们开始迁移到1.5.16时。最后,我创建了一个简单的测试应用程序来解决这个问题。但我感到惊讶的是,即使是简单的两页应用程序也没有达到它设计的目的——它在使用setResponsePage()的简单更改页面上显示了404

下面是一些测试应用程序代码、调试步骤和一些想法

应用程序类代码:

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);
  }
}
公共类WickettesApplication扩展了WebApplication{
公共WicketTestApplication(){
超级();
}
公共静态Wicket应用程序get(){
return(WicketTestApplication)Application.get();
}
@凌驾

公共类Wicket 1.5应该可以与Servlet 2.5配合使用

关于您的路径问题:

1) 如果使用
mountPage(“second”,SecondPage.class)
在应用程序#init()中装入页面,则Wicket应重定向到
/second

2) 如果您没有显式装载它,Wicket应该重定向到
/Wicket/bookmarkable/com.your.package.SecondPage

在这两种情况下,如果页面是有状态的(因为您使用的是Ajax组件),那么它将添加
?123
,其中
123
是一个数字-页面id


在Wicket中,我看不到servlet API的版本与此功能之间有任何关系。

Hi@martin-g,是的,当页面未装入Application.init()中时,就是这种情况。无论是3.0还是3.1 API版本,在第二次请求处理结束时,UrlRenderer类(请参阅我提到的三个步骤)重定向到
com.SomePackage.SecondPage?123
,但使用3.0 API,我在响应头中重定向到
http…testapp/com.SomePackage.SecondPage?123
,wicket返回404。使用3.1 API,我在响应头中已经看到了完整路径
http…testapp/wicket/bookmarkable/com.SomePackage.SecondPage?123
,它可以工作.我不知道为什么会这样,对不起!
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);
  }
}