2011-01-05 1 views
4

wicket 페이지의 <head> 섹션에 내용을 추가하는 두 가지 방법이 있습니다. HeaderContributor을 사용할 수 있으며을 wicket 패널의 html 상단에 사용할 수 있습니다. 나는 웹 분석을 위해 내 사이트의 특정 페이지에 특정 메타 태그를 추가해야하지만 나는 마다의 <head> 섹션에 포함하고 웹 로그 분석 스크립트 전에 표시를해야합니다wicket이 항목을 헤더에 추가하는 위치를 제어하는 ​​방법은 무엇입니까?

내 문제는 이것이다 페이지 다른 모든 페이지에서 확장되는 기본 추상 페이지가 있습니다. 기본 페이지에 분석 스크립트를 포함하고 메타 태그를 확장하는 페이지에있는 패널에 메타 태그를 추가하고 싶습니다. 그러나 기본적으로 wicket은 기본 페이지의 <head> 섹션에 포함 된 콘텐츠 뒤에 해당 패널의 <wicket:head></wicket:head>에 넣은 콘텐츠를 추가합니다.

wicket에 덧붙이기를 대신 <wicket:head></wicket:head> 내용 앞에 붙이게하는 방법이 있습니까?

업데이트 : Google 웹 로그 분석이 아닌 Webtrends를 사용하고 있습니다.이 사이트는 head 섹션과 페이지 하단에 2 개의 스크립트가 필요합니다.

+0

: http://slidesha.re/fSPlyV – hemp

+0

하지 귀하의 질문에 진짜 대답, 하지만 문제가 해결 될 수도 있습니다. 닫는 태그 바로 앞에 AbstractBasepase에 googleanalytics javasript 코드를 추가하십시오. 나는 이것이 어쨌든 Google에 의해 제안 된 위치라고 생각 했습니까? – bert

답변

3

Wicket 1.5에서는 ChildFirstHeaderRenderStrategy (실험) 또는 ParentFirstHeaderRenderStrategy (기본값)와 같이 IHeaderRenderStrategy 구현이 다른 experimenting입니다. 1.4에서 헤더 기여도를 재정렬하는 것이 문제였던 것 같습니다. 그래서 그들은 그것을 강조하고 있습니다.

그러나 Wicket 1.4에는 몇 가지 해결책이 있습니다. 아이디어는 행동 목록을 재정렬하는 것입니다 (헤더 기여도는 또 다른 IBehavior입니다). 각 구성 요소는 덮어 쓸 수있는 보호 된 getBehaviors() 메서드가 있습니다. 트릭은 먼저 포함되어야하는 특수 JS 파일에 해당하는 동작을 찾는 것입니다. HeaderContribution 객체의 인스턴스를 직접 생성하여 인스턴스 비교를 수행 한 다음 ArrayList를 사용하여 Behaviour 목록의 중간에서 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 % 통제권을주지는 않지만, 당신이하고 싶은 일에 이미 충분할 것입니다. –