2012-01-06 8 views
0

私はVisuralから非常に素晴らしいConfirmerAjaxLinkを使用しようとしています。しかし、私はページをロードするときにjsスクリプトを取得しています: 'jQueryは定義されていません'。私はConfirmerAjaxLinkはjQueryのを使用する別のJavaScriptを追加することを見たクイック検索後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")); 
} 
} 

私は、問題を識別するために、少しテストページを書きました。ただし、これはコンポーネント(上のリンク)に追加された動作によって行われるため、このスクリプトはjQueryよりも前のマークアップに追加されます(これはマイページのrenderHeadの前に呼び出されるためです)。

私が最初にこのような親にheaderRenderStrategyを変更する場合:

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

それは動作しますが、これは解決策(また、AbstractHeaderRenderStrategyにで述べたように:正式WICKETでサポートされていない)よりもハックです。

これにはクリーンな方法がありますか(私は例外ではないと思います)問題はありますか?

+0

私はこれを行うためのきれいな方法を考えることはできませんが、[this](http://stackoverflow.com/questions/8313657/writing-script-src-dynamically-via-wicket/8316381)マークアップのどこにでもjavascriptファイルを追加することができます。 – rotsch

答えて

1

Visuralサンプルアプリケーションには、メインのWebApplicationクラスのコンストラクタにjQueryが含まれています。 Visuralサンプルアプリケーションのコード:

public class ExamplesApplication extends WebApplication { 

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

また、jQueryインクルードをページのHTMLの先頭に置くこともできます。私はそれをテストし、うまくいきました。

+0

ありがとう、またこれに気づいたが、すぐに1.5でこれを行う方法が見つかりませんでした。私はVisuralがそれを好きだと思う[これは](https://github.com/rjnichols/visural-wicket/blob/wicket-1.5/visural-wicket-examples/src/java/com/visural/wicket/examples/BasePage .java)。 1.5で、アプリケーションのgetHeaderContributorListenerCollection()にIHeaderContributorを追加する必要があることがわかりました。どちらも私のために働く。 –

関連する問題