2

インポートした CSS と JS をJavascriptFilteredIntoFooterHeaderResponseで注文します。このクラスを使用すると、ヘッダー内のすべての CSS と</body>タグの近くの別のコンテナーにすべての JS が移動します。しかし今、ヘッダーに 1 つの 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 に答える