2

我用JavascriptFilteredIntoFooterHeaderResponse订购了我导入的 CSS 和 JS 。有了这个类,我所有的 CSS 都在标题中,我所有的 JS 到</body>标签附近的一个单独的容器中。但现在我需要在页眉中添加一个 JS,但检票口将每个 JS 推到页脚。知道有人解决这个问题吗?JavascriptFilteredIntoFooterHeaderResponse 是最终的,不能被覆盖。

检票应用

@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>
4

1 回答 1

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

于 2012-10-01T12:41:44.057 回答