我使用 JavascriptFilteredIntoFooterHeaderResponse 命令导入的CSS和JS。使用此类将标题中的所有CSS和我的所有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>
答案 0 :(得分:4)
您无需覆盖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”是您希望在标题中包含的脚本。
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中的源代码。