在 Wicket 1.5 中,他们正在试验不同的IHeaderRenderStrategy
实现,例如 ChildFirstHeaderRenderStrategy(实验性)或 ParentFirstHeaderRenderStrategy(默认)。似乎重新排序标题贡献在 1.4 中是一个问题,所以他们正在解决它。
但是,对于 Wicket 1.4,有某种解决方案。这个想法是重新排序行为列表(标题贡献只是另一个 IBehavior)。每个组件都有一个getBehaviors()
可以被覆盖的受保护方法。诀窍是找到与您应该首先包含的特殊 JS 文件相对应的行为。我通过创建自己的 HeaderContribution 对象实例来做到这一点,因此我可以执行实例比较,然后使用 ArrayList 将 HeaderContribution 对象从行为列表的中间移动到行为列表的顶部:
public abstract class BasePage extends WebPage {
public BasePage() {
add(HeaderContributor.forJavaScript("foo-base.js"));
}
}
HomePage 添加了应首先呈现的附加脚本。HomePage 还覆盖了 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>