Wicket 9:JavaScriptFilteredIntoFooterHeaderResponse的使用似乎会给renderHead带来麻烦
我正在使用Wicket 9,包括Wicket spring boot starter 3.0.4 在我的演示项目中,有必要将JavaScript放在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
的末尾。因此,我遵循了本文中的解释
我还通过在我的页面中实现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的文档及其迁移指南