Wicket 8 AnnotatedMountScanner不再工作

时间:2018-08-17 12:39:25

标签: wicket wicket-8

从Wicket 7升级到Wicket 8后,页面安装不再起作用。

在Wicket 7中,我添加了

new AnnotatedMountScanner().scanPackage("com.example").mount(this);

在我的init()的{​​{1}}方法中 在我的页面上,我添加了AuthenticatedWebApplication

在Wicket 8中,它不再起作用,并且浏览器URL指向@MountPath("/mypage")而不是/mypage,但是当我手动添加
wicket/bookmarkable/com.example.MyPage有效。

这是我所有有检票口依赖性的类路径:

  

$ mvn依赖项:tree | grep wicket [INFO] +-

     

org.apache.wicket:wicket-core:jar:8.0.0:compile [INFO] | +-
  org.apache.wicket:wicket-request:jar:8.0.0:compile [INFO] | +-
  org.apache.wicket:wicket-util:jar:8.0.0:compile [INFO] +-
  org.wicketstuff:wicketstuff-annotation:jar:8.0.0:compile [INFO] +-
  org.apache.wicket:wicket-spring:jar:8.0.0:compile [INFO] | -
  org.apache.wicket:wicket-ioc:jar:8.0.0:compile [INFO] +-
  org.apache.wicket:wicket-datetime:jar:8.0.0-M7:compile [INFO] +-
  org.apache.wicket:wicket-auth-roles:jar:8.0.0:compile [INFO] +-
  de.agilecoders.wicket:wicket-bootstrap-core:jar:2.0.2:compile [INFO]
  | +-de.agilecoders.wicket:jquery-selectors:jar:2.0.0:compile   [INFO] | +-   de.agilecoders.wicket.webjars:wicket-webjars:jar:2.0.7:compile [INFO]   | +-org.apache.wicket:wicket扩展名:jar:8.0.0:compile [INFO]   +-de.agilecoders.wicket:wicket-bootstrap-extensions:jar:2.0.2:compile
  [INFO] +-
  com.googlecode.wicket-jquery-ui:wicket-jquery-ui-plugins:jar:8.0.0-M7:compile   [INFO] | -
  com.googlecode.wicket-jquery-ui:wicket-jquery-ui-core:jar:8.0.0-M7:compile

但是我不想手动添加所有我的页面。能否在Wicket 8中再次使用mountPage("AAA", MyPage.class);

1 个答案:

答案 0 :(得分:4)

原来是spring-boot devtools的类重新加载问题。 当将spring-boot-devtools添加为依赖项时,RestartClassLoader始终会更改页面类和Wickets页面类匹配的顺序。

调试后的解释。 当我的BookmarkablePageLink调用getURL()时,它经历了RequestHandler的常规Wicket处理。

关键部分始于AbstractBookmarkableMapper#382,如果checkPageClass中的页面类别内部与RequestHandler的类别相匹配,Wicket就会通过调用MountedMapper来找出答案。通过pageClassProvider表示。

@Override
protected boolean checkPageClass(Class<? extends IRequestablePage> pageClass)
{
    return Objects.equals(pageClass, this.getPageClass());
}

由于对象不同(由于使用RestartClassLoader),我的可标记页面没有从MountedMapper获取URL。