Wicket操纵javascript导入顺序

时间:2012-01-06 21:25:37

标签: java wicket wicket-1.5

我正在尝试使用来自Visural的非常好的ConfirmerAjaxLink。但是,我在加载页面时收到了一个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将添加另一个使用jQuery的javascript。但是,由于这是通过添加到组件(链接上方)的行为完成的,因此该脚本会在jQuery之前添加到标记中(因为这是在我的页面的renderHead之前调用的)。

如果我首先将headerRenderStrategy更改为父级:

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

它有效,但这更像是一个黑客而不是一个解决方案(同样,如AbstractHeaderRenderStrategy中所述:不是由WICKET正式支持)。

这是否有一个干净的方式(我认为不是例外)问题?

1 个答案:

答案 0 :(得分:1)

Visural示例应用程序在主WebApplication类的构造函数中包含jQuery。来自Visural示例应用程序的代码:

public class ExamplesApplication extends WebApplication {

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

您也可以将jQuery include放在页面HTML的头部。我测试了它,并且工作正常。