java - 如何控制 Wicket 口将项目添加到标题的位置?

标签 java header wicket analytics webtrends

我知道有两种方法可以将内容添加到 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/

相关文章:

wicket - 如何禁用 JavaScript 文件的版本控制?

java - 如何使用POST查询上传数据?

java - 无法使用 Scanner Java 读取斜杠 (/)

html - 将我的标题图片固定在特定的静态页面上

java - Wicket 正在更改 requestURL

java - 将现有的 Wicket 应用程序用于 Android 应用程序

java - 如何在JBOSS AS 5.1.0中添加管理用户?

java - 如何确保字符串只有任意长度的双倍?

css - 用于响应式流体的 Bootstrap 内部间距删除

wpf - 禁止在不可排序的 WPF ListView header 中按下按钮反馈