Калитка управляет порядком импорта javascript

Я пытаюсь использовать очень хорошую ссылку ConfirmerAjaxLink из Visural. Однако при загрузке страницы я получаю js-скрипт: «jQuery не определен».

Я написал небольшую тестовую страницу для выявления проблемы:

public class ConfirmAjaxLinkTestPage extends WebPage {

public ConfirmAjaxLinkTestPage() {
    this.add(new ConfirmerAjaxLink("confirm") {

        @Override
        public void onClick(AjaxRequestTarget target) {
            System.out.println("OK");
        }
    });
}

@Override
public void renderHead(IHeaderResponse response) {
    response.renderJavaScriptReference(new JavaScriptResourceReference(
            JavascriptLibraryUtil.class,
            "jquery/jquery-1.6.1.min.js"));
}
}

После быстрого поиска я увидел, что ConfirmerAjaxLink добавит еще один javascript, использующий jQuery. Однако, поскольку это делается с помощью поведения, которое добавляется к компоненту (ссылка выше), этот скрипт добавляется в разметку перед jQuery (поскольку он вызывается перед renderHead моей страницы).

Если я сначала изменю headerRenderStrategy на parent следующим образом:

System.setProperty("Wicket_HeaderRenderStrategy","org.apache.wicket.markup.renderStrategy.ParentFirstHeaderRenderStrategy");

это работает, но это скорее хак, чем решение (также, как указано в AbstractHeaderRenderStrategy: ОФИЦИАЛЬНО НЕ ПОДДЕРЖИВАЕТСЯ WICKET).

Есть ли чистый способ решить эту (думаю, не исключительную) проблему?


person Stijn Geukens    schedule 06.01.2012    source источник
comment
Я не могу придумать чистый способ сделать это, но вы можете использовать это чтобы добавить файл javascript в любое место разметки.   -  person rotsch    schedule 07.01.2012


Ответы (1)


Пример приложения Visual включает jQuery в конструктор основного класса WebApplication. Код из примера приложения Visual:

public class ExamplesApplication extends WebApplication {

public ExamplesApplication() {
    addRenderHeadListener(JavascriptPackageResource.getHeaderContribution(new JQueryResourceReference(Version.V1_4_2)));
}

Вы также можете просто включить jQuery в заголовок HTML-страницы. Я проверил это, и это сработало нормально.

person Phil McCullick    schedule 06.01.2012
comment
Спасибо, тоже это заметил но не нашел сразу как это сделать в 1.5. Я вижу, что Visural делает это как это. Я обнаружил, что в версии 1.5 вам нужно добавить IHeaderContributor в getHeaderContributorListenerCollection() в Application. Оба работают на меня. - person Stijn Geukens; 08.01.2012