2011-01-05 73 views
4

我知道兩種方法將內容添加到wicket中頁面的<head>部分。您可以使用HeaderContributor,您可以在檢票面板的html頂部使用<wicket:head></wicket:head>如何控制wicket將項目添加到標題的位置?

我的問題是這樣的:我需要特殊的meta標籤添加到特別頁我的網站的網站分析的目的,但我需要他們出現之前,我包括在每次<head>部分的分析腳本頁面。我有一個基本的抽象頁面,可以通過其他頁面進行擴展。我希望將分析腳本包含在基本頁面中,並將元標記添加到位於擴展它的頁面中的面板中。但是,默認情況下,wicket會將基本頁面<head>部分中包含的內容添加到這些面板的<wicket:head></wicket:head>中。

有沒有辦法告訴wicket預先安裝<wicket:head></wicket:head>內容而不是追加它?

更新:我使用的是Webtrends,而不是Google Analytics,它需要2個腳本:其中一個位於head部分,另一個位於頁面底部。

+0

您也可以考慮有關異步標記,這將不需要放置腳本頭部信息聯繫Webtrends的支持:http://slidesha.re/fSPlyV – hemp 2011-01-12 22:18:35

+0

不是一個真正的回答你的問題,但它可能解決您的問題:在關閉標記之前將Google Analytics分析代碼添加到AbstractBasepase中。我認爲這是谷歌提出的立場? – bert 2011-01-05 18:23:47

回答

3

在Wicket 1.5中,它們是experimenting與不同的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")); 
} 

} 

主頁添加了應該先呈現的附加腳本。網頁還覆蓋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; 
} 
} 

現在,最終的結果將是,通過添加主頁劇本第一次呈現,並通過添加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> 
+0

我也發現可以通過不直接從頁面本身提供貢獻,而是通過頁面上的一些(虛擬)組件來影響頭文件的順序。通過使用作出貢獻的組件的順序來影響貢獻的順序。不給你100%的控制,但可能已經足夠你想做的事情。 – 2013-11-25 10:50:37

相關問題