Wicket 8 AnnotatedMountScanner 不再工作
Wicket 8 AnnotatedMountScanner not working anymore
从 Wicket 7 升级到 Wicket 8 后,页面安装不再起作用。
在 Wicket 7 中我添加了
new AnnotatedMountScanner().scanPackage("com.example").mount(this);
在我的 init()
方法中 AuthenticatedWebApplication
在我的页面上,我添加了 @MountPath("/mypage")
.
在 Wicket 8 中,这不再起作用,浏览器 URL 指向 wicket/bookmarkable/com.example.MyPage
而不是 /mypage
,但是当我手动添加
mountPage("AAA", MyPage.class);
有效。
这是我的所有 wicket 依赖项的类路径:
$ mvn dependency: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-extensions: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 中再次使用 AnnotatedMountScanner
?
结果是 class 重新加载 spring-boot devtools
的问题。
当 spring-boot-devtools
添加为依赖项时,RestartClassLoader
总是更改页面 Classes 和 Wickets 页面 Class 匹配顺序不正确。
调试后的解释。
当我的 BookmarkablePageLink 调用 getURL()
时,它通过 RequestHandlers 的正常 Wicket 处理。
关键部分从 AbstractBookmarkableMapper#382
开始,Wicket 试图通过调用 checkPageClass
找出 RequestHandler
中的页面 class 是否与 class 的 MountedMapper
内部表示为 pageClassProvider
.
@Override
protected boolean checkPageClass(Class<? extends IRequestablePage> pageClass)
{
return Objects.equals(pageClass, this.getPageClass());
}
由于 objects 不一样(由于使用了 RestartClassLoader
),我的可收藏页面没有从 MountedMapper
获得 URL。
从 Wicket 7 升级到 Wicket 8 后,页面安装不再起作用。
在 Wicket 7 中我添加了
new AnnotatedMountScanner().scanPackage("com.example").mount(this);
在我的 init()
方法中 AuthenticatedWebApplication
在我的页面上,我添加了 @MountPath("/mypage")
.
在 Wicket 8 中,这不再起作用,浏览器 URL 指向 wicket/bookmarkable/com.example.MyPage
而不是 /mypage
,但是当我手动添加
mountPage("AAA", MyPage.class);
有效。
这是我的所有 wicket 依赖项的类路径:
$ mvn dependency: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-extensions: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 中再次使用 AnnotatedMountScanner
?
结果是 class 重新加载 spring-boot devtools
的问题。
当 spring-boot-devtools
添加为依赖项时,RestartClassLoader
总是更改页面 Classes 和 Wickets 页面 Class 匹配顺序不正确。
调试后的解释。
当我的 BookmarkablePageLink 调用 getURL()
时,它通过 RequestHandlers 的正常 Wicket 处理。
关键部分从 AbstractBookmarkableMapper#382
开始,Wicket 试图通过调用 checkPageClass
找出 RequestHandler
中的页面 class 是否与 class 的 MountedMapper
内部表示为 pageClassProvider
.
@Override
protected boolean checkPageClass(Class<? extends IRequestablePage> pageClass)
{
return Objects.equals(pageClass, this.getPageClass());
}
由于 objects 不一样(由于使用了 RestartClassLoader
),我的可收藏页面没有从 MountedMapper
获得 URL。