我使用 JavascriptFilteredIntoFooterHeaderResponse 来订购导入的 CSS 和 JS。有了这个类,我所有的 CSS 都放在 header 中,所有的 JS 都放在 </body>
附近的一个单独的容器中。标签。但现在我需要向页眉添加一个 JS,但 wicket 将每个 JS 都推送到页脚。知道有人有解决这个问题的方法吗? JavascriptFilteredIntoFooterHeaderResponse 是最终的,不能被覆盖。
WicketApplication
@Override
public void init()
{
super.init();
setHeaderResponseDecorator( new IHeaderResponseDecorator()
{
@Override
public IHeaderResponse decorate( IHeaderResponse response )
{
return new JavascriptFilteredIntoFooterHeaderResponse( response, FOOTER_FILTER_NAME );
}
} );
}
BasePage.java
public BasePage()
{
add( new HeaderResponseFilteredResponseContainer( FOOTER_FILTER_NAME, FOOTER_FILTER_NAME ) );
}
BasePage.html
<body>
...
<div wicket:id="footerBucket" />
</body>
最佳答案
您不需要覆盖JavascriptFilteredIntoFooterHeaderResponse。只需将 org.apache.wicket.resource.filtering.HeaderResponseContainerFilteringHeaderResponse 与以下构造函数一起使用即可:
HeaderResponseContainerFilteringHeaderResponse(IHeaderResponse response,
String headerFilterName, IHeaderResponseFilter[] filters)
例如,如果您写:
IHeaderResponseFilter[] filters = new IHeaderResponseFilter[] {
new CssAcceptingHeaderResponseFilter(HEADER_FILTER_NAME),
new JavascriptAcceptingHeaderResponseFilter(FOOTER_FILTER_NAME) };
return new HeaderResponseContainerFilteringHeaderResponse(response,
HEADER_FILTER_NAME, filters);
它将与您在代码中使用的 JavascriptFilteredIntoFooterHeaderResponse 相同。
这是一个匿名过滤器类的示例,您可以使用它来代替 CssAcceptingHeaderResponseFilter 来完成您的任务。文件“script-for-the-header.js”是您希望在 header 中包含的脚本。
new CssAcceptingHeaderResponseFilter(HEADER_FILTER_NAME) {
@Override
public boolean acceptReference(ResourceReference ref) {
if (!Strings.isEmpty(ref.getName()) && ref.getName().equals("script-for-the-header.js")) {
return true;
} else {
return super.acceptReference(ref);
}
}
}
为了更好地组织您的代码,您还可以考虑重写 HeaderResponseContainerFilteringHeaderResponse (如果您还没有猜到,它也是 JavascriptFilteredIntoFooterHeaderResponse 的父级)。请参阅 JavascriptFilteredIntoFooterHeaderResponse.java 中的源代码了解详情。
关于javascript - 尽管 JavascriptFilteredIntoFooterHeaderResponse 将 JS 添加到 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12672218/