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>