尽管使用了JavascriptFilteredIntoFooterHeaderResponse,但仍将JS添加到标头中

时间:2012-10-01 11:16:03

标签: javascript wicket

我使用 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>

1 个答案:

答案 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中的源代码。