Wicket 9:JavaScriptFilteredIntoFooterHeaderResponse的使用似乎会给renderHead带来麻烦

Wicket 9:JavaScriptFilteredIntoFooterHeaderResponse的使用似乎会给renderHead带来麻烦,java,spring-boot,wicket,renderer,Java,Spring Boot,Wicket,Renderer,我正在使用Wicket 9,包括Wicket spring boot starter 3.0.4 在我的演示项目中,有必要将JavaScript放在的末尾。因此,我遵循了本文中的解释 我还通过在我的页面中实现Component#renderHead(IHeaderReponse)添加了资源(CSS和JS) 使用导叶8(来自导叶弹簧靴启动器2.1.9)时,所有工作均按预期进行 在Wicket 9中,为了让我的应用程序运行,我首先将webApplication.getCspSettings().bl

我正在使用Wicket 9,包括Wicket spring boot starter 3.0.4

在我的演示项目中,有必要将JavaScript放在
的末尾。因此,我遵循了本文中的解释

我还通过在我的页面中实现
Component#renderHead(IHeaderReponse)
添加了资源(CSS和JS)

使用导叶8(来自导叶弹簧靴启动器2.1.9)时,所有工作均按预期进行

在Wicket 9中,为了让我的应用程序运行,我首先将
webApplication.getCspSettings().blocking().disabled()放入在WicketApplicationInitConfiguration#init(WebApplication)
中。我的应用程序启动,但生成的页面不包含
部分,因此由于缺少资源,应用程序无法工作

为了使
元素与所有引用一起出现在我的页面中,我注释掉了
中所有涉及JavaScript呈现的代码。 但我的应用程序无法使用这种“变通方法”

我做错什么了吗

@ApplicationInitExtension
公共类DemoWicketInitializer实现WicketApplicationInitConfiguration{
@凌驾
public void init(WebApplication WebApplication){
webApplication.getCspSettings().blocking().disabled();
webApplication.getHeaderResponseDecorators().add(响应->新资源聚合器(
新的JavaScriptFilteredIntoFooterHeaderResponse(响应,“脚本”);
webApplication.getMarkupSettings().setDefaultMarkupEncoding(“UTF-8”);
}
}
@WicketHomePage
公共类MyPage扩展网页{
@凌驾
公共无效renderHead(IHeaderResponse响应){
super.renderHead(响应);
response.render(JavaScriptHeaderItem.forUrl(
"https://api.mapbox.com/mapbox-gl-js/v1.8.1/mapbox-gl.js"));
response.render(JavaScriptHeaderItem.forUrl(
"https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-draw/v1.0.9/mapbox-gl-draw.js"));
//这段JS必须出现在中################################
response.render(JavaScriptHeaderItem.forReference)(新的PackageResourceReference(getClass()),
“js/demoMapbox.js”);
response.render(CssHeaderItem.forUrl(
"https://api.mapbox.com/mapbox-gl-js/v1.8.1/mapbox-gl.css"));
response.render(CssHeaderItem.forUrl(
"https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-draw/v1.0.9/mapbox-gl-draw.css"));
}
公共MyPage(页面参数){
//某些组件
添加(新的HeaderResponseContainer(“脚本块”、“脚本”);
}
}

Wicket和地图盒

泽克农

Polygone WGS84

聚酮UTM32N

公共类ServletInitializer扩展了SpringBootServletInitializer{
@凌驾
受保护的SpringApplicationBuilder配置(SpringApplicationBuilder应用程序){
返回application.sources(DemoWicketMapboxApplication.class);
}
}

看起来CSP机制正在干扰JavaScriptFilteredIntoFooterHeaderResponse。我将在JIRA上就此展开讨论。同时,作为解决方法,您可以使用setHeaderResponseDecorator(已弃用)而不是getHeaderResponseDecorators:

setHeaderResponseDecorator(response -> new ResourceAggregator(
            new JavaScriptFilteredIntoFooterHeaderResponse(response, "scripts")));
这会让你的应用程序正常工作

更新

因为这不是一个bug。由于现在我们已经在CSP中默认添加了ResourceAggregator,要添加进一步的响应装饰器,我们应该执行以下操作:

getHeaderResponseDecorators().add(response -> 
 new JavaScriptFilteredIntoFooterHeaderResponse(response, "scripts"));
我们将相应地更新Wicket 9.x的文档及其迁移指南