4

<head>改札のページのセクションにコンテンツを追加する2つの方法を知っています。HeaderContributorsを使用でき<wicket:head></wicket:head>、改札パネルのhtmlの上部にあるを使用できます。

私の問題はこれです:ウェブ分析の目的でサイトの特定のページに特定のメタタグを追加する必要がありますが、すべて<head>のページのセクションに含める分析スクリプトの前にそれらを表示する必要があります。1ページおきに拡張される基本要約ページがあります。ベースページに分析スクリプトを含め、それを拡張するページにあるパネルにメタタグを追加したいと思います。ただし、デフォルトでは、ウィケットは、ベースページのセクションに含まれるコンテンツの後に、これらのパネルに配置したコンテンツを追加します。<wicket:head></wicket:head><head>

<wicket:head></wicket:head>コンテンツを追加する代わりに、そのコンテンツを追加するようにウィケットに指示する方法はありますか?

更新:私はGoogle AnalyticsではなくWebtrendsを使用しています。これには、2つのスクリプトが必要です。1つはheadセクションに、もう1つはページの下部にあります。

4

1 に答える 1

3

Wicket 1.5では、ChildFirstHeaderRenderStrategy(実験的)やParentFirstHeaderRenderStrategy(デフォルト)などのさまざまな実装を実験しています。IHeaderRenderStrategy1.4ではヘッダーコントリビューションの並べ替えが問題だったようですので、彼らはそれに対処しています。

ただし、Wicket 1.4には、ある種の解決策があります。アイデアは、動作のリストを並べ替えることです(ヘッダーの貢献はさらに別のIB動作です)。getBehaviors()各コンポーネントには、上書き可能な保護されたメソッドがあります。秘訣は、最初に含める必要のある特別なJSファイルに対応する動作を見つけることです。これを行うには、HeaderContributionオブジェクトの独自のインスタンスを作成しました。これにより、インスタンスの比較を実行し、ArrayListを使用して、HeaderContributionオブジェクトを動作リストの中央から動作リストの先頭に移動できます。

public abstract class BasePage extends WebPage {

public BasePage() {
    add(HeaderContributor.forJavaScript("foo-base.js"));
}

}

ホームページは、最初にレンダリングする必要がある追加のスクリプトを追加します。ホームページはgeBehaviors()メソッドも上書きします。

public class HomePage extends BasePage {

private static final long serialVersionUID = 1L;

private final HeaderContributor contrib = new HeaderContributor(
        new IHeaderContributor() {
    public void renderHead(IHeaderResponse response) {
        response.renderJavascriptReference("foo-first.js");
    }
});

public HomePage(final PageParameters parameters) {
    add(new Label("message", "If you see this message ..."));
    add(contrib);
}

@Override
protected List getBehaviors(Class type) {
    List behaviors = super.getBehaviors(type);
    ArrayList sortedBehaviors = new ArrayList(behaviors);
    boolean moveToTop = true;
    if (moveToTop) {
        if (!sortedBehaviors.remove(contrib)) {
            throw new IllegalStateException();
        }
        sortedBehaviors.add(0, contrib);
    }
    return sortedBehaviors;
}
}

これで、HomePageによって追加されたスクリプトが最初にレンダリングされ、BasPageによって追加されたスクリプトが後に表示されます。

<html xmlns:wicket="http://wicket.apache.org/... >
<head>  
    <title>Wicket Quickstart Archetype Homepage</title>
<script type="text/javascript" src="foo-first.js"></script>
<script type="text/javascript" src="foo-base.js"></script>
</head>
于 2011-01-05T22:47:07.243 に答える