Pergunta

Eu conheço duas maneiras de adicionar conteúdo ao <head> Seção da página no wicket. Você pode usar HeaderContributors e você pode usar o <wicket:head></wicket:head> No topo do HTML do seu painel de postigos.

Meu problema é o seguinte: preciso adicionar metatags específicas a especial Páginas do meu site para fins de análise da web, mas preciso que eles apareçam perante um script de análise que estou incluindo no <head> Seção de todo página. Eu tenho uma página abstrata base que é estendida por todas as outras páginas. Quero incluir o script de análise na página base e adicionar as metatags nos painéis localizados nas páginas que o estendem. No entanto, por padrão, wicket adiciona o conteúdo que você coloca no <wicket:head></wicket:head> desses painéis após o conteúdo incluído no <head> Seção da página base.

Existe uma maneira de dizer a Wicket para prender que <wicket:head></wicket:head> Conteúdo em vez de anexá -lo?

ATUALIZAÇÃO: Estou usando WebTrends, não o Google Analytics, que requer 2 scripts: um no head seção e uma na parte inferior da página.

Foi útil?

Solução

No wicket 1.5, eles estão experimentando com diferentes IHeaderRenderStrategy implementações, como ChildFirStheaderrenderStrategy (Experimental) ou ParentFirStheaderrenderStrategy (padrão). Parece que reordenar as contribuições do cabeçalho foi um problema em 1.4, então eles estão enfrentando.

No entanto, para o wicket 1.4, existe algum tipo de solução. A idéia é reordenar a lista de comportamentos (as contribuições do cabeçalho são apenas mais um ibehavior). Cada componente tem um protegido getBehaviors() método que pode ser substituído. O truque é encontrar o comportamento que corresponde ao seu arquivo JS especial que deve ser incluído primeiro. Eu fiz isso criando minha própria instância de um objeto de headercontribution, para que eu pudesse executar uma comparação de instância e depois usar uma lista de Arraylist para mover o objeto de tabela de headercontribution no meio da lista de comportamento para o topo da lista de comportamento:

public abstract class BasePage extends WebPage {

public BasePage() {
    add(HeaderContributor.forJavaScript("foo-base.js"));
}

}

A página inicial adiciona o script adicional, que deve ser renderizado primeiro. A página inicial também substitui o método 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;
}
}

Agora, o resultado final será que o script adicionado pela página inicial é renderizado primeiro e o script adicionado pela Baspage ocorre depois.

<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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top