2012-01-06 30 views
0

我正在尝试使用来自Visural的非常漂亮的ConfirmerAjaxLink。不过,我在加载页面时得到了一个js脚本:'jQuery没有定义'。Wicket操纵javascript导入顺序

我写了一个小测试页,找出问题:

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表示在:不正式支持检票)。

有没有一个干净的方式,这(我想不会例外)的问题?

+0

我想不出一个干净的方式来做到这一点,但你可以使用[this](http://stackoverflow.com/questions/8313657/writing-script-src-dynamically-via-wicket/8316381)在您的标记中的任何位置添加您的JavaScript文件。 – rotsch 2012-01-06 21:39:25

回答

1

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

public class ExamplesApplication extends WebApplication { 

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

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

+0

谢谢,也注意到这一点,但没有立即找到如何在1.5中做到这一点。我发现Visural喜欢[this](https://github.com/rjnichols/visural-wicket/blob/wicket-1.5/visural-wicket-examples/src/java/com/visural/wicket/examples/BasePage的.java)。我发现在1.5中你需要在应用程序中添加一个IHeaderContributor来getHeaderContributorListenerCollection()。两者都适合我。 – 2012-01-07 20:33:24