Wicket манипулирует порядком импорта javascript - PullRequest
0 голосов
/ 07 января 2012

Я пытаюсь использовать очень хороший 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).

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

1 Ответ

1 голос
/ 07 января 2012

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

public class ExamplesApplication extends WebApplication {

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

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

...