我知道有两种方法可以将内容添加到 wicket 页面的 <head>
部分。您可以使用 HeaderContributor
s,也可以使用 wicket 面板 html 顶部的 <wicket:head></wicket:head>
。
我的问题是:我需要将特定元标记添加到我网站的特定页面以进行网络分析,但我需要它们出现在我包含在 <head>
中的分析脚本之前每个 页面的部分。我有一个基本的抽象页面,每个其他页面都会对其进行扩展。我想在基页中包含分析脚本,并在位于扩展它的页面中的面板中添加元标记。但是,默认情况下,wicket 会在基本页面的 <wicket:head></wicket:head>
部分中包含的内容之后添加您放入这些面板的 <head>
中的内容。
有没有办法告诉 wicket 将 <wicket:head></wicket:head>
内容放在前面而不是附加它?
更新:我使用的是 Webtrends,而不是 Google Analytics,它需要 2 个脚本:一个在 head
部分,一个在页面底部。
最佳答案
在 Wicket 1.5 中,它们是 experimenting使用不同的 IHeaderRenderStrategy
实现,例如 ChildFirstHeaderRenderStrategy(实验性)或 ParentFirstHeaderRenderStrategy(默认)。重新排序标题贡献似乎是 1.4 中的一个问题,所以他们正在解决它。
但是,对于 Wicket 1.4,有某种解决方案。这个想法是重新排序行为列表(标题贡献只是另一个 IBehavior)。每个组件都有一个 protected getBehaviors()
方法,该方法可以被覆盖。诀窍是找到与您的特殊 JS 文件相对应的行为,该文件应首先包含。为此,我创建了自己的 HeaderContribution 对象实例,这样我就可以执行实例比较,然后使用 ArrayList 将 HeaderContribution 对象从行为列表的中间移动到行为列表的顶部:
public abstract class BasePage extends WebPage {
public BasePage() {
add(HeaderContributor.forJavaScript("foo-base.js"));
}
}
主页添加了额外的脚本,应该首先呈现。 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>
关于java - 如何控制 Wicket 口将项目添加到标题的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4607591/