2011-01-05 4 views
4

Ich kenne zwei Möglichkeiten, Inhalt zum Abschnitt der Seite in Wicket hinzuzufügen. Sie können HeaderContributor s verwenden und Sie können die <wicket:head></wicket:head> oben in Ihrem Wicket Panel html verwenden.Wie kann gesteuert werden, wo Wicket Elemente zum Header hinzufügt?

Mein Problem ist folgendes: Ich insbesondere Meta-Tags zu insbesondere Seiten meiner Website für Web-Analyse Zwecke hinzufügen müssen, aber ich brauche sie vor einem Analytics-Skript zu erscheinen, dass ich darunter bin im <head> Abschnitt jeder Seite. Ich habe eine abstrakte Basisseite, die um jede zweite Seite erweitert wird. Ich möchte das Analysis-Skript in die Basis-Seite einfügen und die Meta-Tags in die Bereiche einfügen, die sich auf Seiten befinden, die es erweitern. Standardmäßig fügt Wicket jedoch den Inhalt hinzu, den Sie in den Feldern <wicket:head></wicket:head> dieser Panels NACH dem Inhalt des Abschnitts <head> auf der Basisseite platziert haben.

Gibt es eine Möglichkeit, Wicket zu sagen, den Inhalt <wicket:head></wicket:head> voranzustellen, anstatt es anzuhängen?

UPDATE: Ich benutze Webtrends, nicht Google Analytics, die 2 Skripte benötigt: eines im Bereich head sowie eines am Ende der Seite.

+0

Sie auch Informationen über die Asynchron-Tag Webtrends Support kontaktieren betrachten kann, die nicht erfordern würde das Skript im Kopfbereich platzieren: http://slidesha.re/fSPlyV – hemp

+0

Keine wirkliche Antwort auf Ihre Frage, aber es könnte Ihr Problem lösen: fügen Sie den googleanalytics Javasript Code in Ihre AbstractBasePase direkt vor dem schließenden Tag ein. Ich dachte, das ist die vorgeschlagene Position von Google überhaupt? – bert

Antwort

3

In Wicket 1.5 sind sie experimenting mit verschiedenen Implementierungen IHeaderRenderStrategy, wie ChildFirstHeaderRenderStrategy (experimentell) oder ParentFirstHeaderRenderStrategy (Standard). Es scheint so, als ob die Nachbestellung von Header-Beiträgen in 1.4 ein Problem darstellte, also adressieren sie es.

Allerdings gibt es für Wicket 1.4 eine Art Lösung. Die Idee ist, die Liste der Verhaltensweisen neu zu ordnen (Header-Beiträge sind nur ein weiteres IB-Verhalten). Jede Komponente hat eine geschützte getBehaviors() Methode, die überschrieben werden kann. Der Trick besteht darin, das Verhalten zu finden, das Ihrer speziellen JS-Datei entspricht, die zuerst enthalten sein sollte. Dazu erstellte ich meine eigene Instanz eines HeaderContribution-Objekts, sodass ich einen Instanzvergleich durchführen und dann mithilfe einer ArrayList das HeaderContribution-Objekt in der Mitte der Verhaltensliste an den Anfang der Verhaltensliste verschieben konnte:

Die HomePage fügt das zusätzliche Skript hinzu, das zuerst gerendert werden soll. Die Homepage überschreibt auch den geBehaviors() -Methode:

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; 
} 
} 

Nun wird das Endergebnis sein, dass das Skript von HomePage hinzugefügt zuerst gerendert wird, und das Skript von der BasPage hinzugefügt kommt danach.

<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> 
+0

Ich habe auch festgestellt, dass es möglich ist, die Reihenfolge der Header Beiträge zu beeinflussen, indem Sie die Beiträge nicht direkt von der Seite selbst, sondern von einigen (Dummy) Komponente auf der Seite. Beeinflussen Sie die Reihenfolge der Beiträge, indem Sie mit der Reihenfolge der Komponenten spielen, die die Beiträge leisten. Gibt Ihnen nicht 100% Kontrolle, aber möglicherweise schon genug für das, was Sie tun möchten. –

Verwandte Themen