3

groovy-wicketの統合を調べていますが、イベントハンドラーを作成するときに、匿名の内部クラスがないことが問題のようです。このコードを書くためのよりグルーヴィーな方法はありますか

import org.apache.wicket.PageParameters
import org.apache.wicket.markup.html.basic.Label
import org.apache.wicket.markup.html.link.Link
import org.apache.wicket.markup.html.WebPage


/**
 * Homepage
 */
class HomePage extends WebPage {


    public HomePage(final PageParameters parameters) {

        // Add the simplest type of label
        add(new Label("message", "Wicket running!"));   
        def link1 = new ClickHandler("link1") //in java, defined inline
        add(link1);
    }   
}

class ClickHandler extends Link{

    ClickHandler(String id) {
        super(id);
    }

    void onClick(){println "Hi"}
}
4

5 に答える 5

1

Ermh ..これは「良い」代替案のようには見えませんが、「公式の」Groovy代替案のようです。

インナークラスに代わるGroovy

于 2009-09-18T00:45:17.437 に答える
1

私は間違っているかもしれませんが、これはWickeBuilderが解決しようとしていることではありません。

Wicket Builderユーティリティは、Wicketコンポーネントツリーを構築するためのGroovyBuilderを実装します。

ビルダーを使用すると、コンポーネントツリーの構築がより簡単になり、読者にとってより明確になりますが、元のドライバーは、Groovyが匿名の内部クラスを許可しないという事実でした。Wicketは、オーバーライドメソッドに依存して、多くのコンポーネントタイプにカスタム機能を提供します。Groovyを使用してWicketページクラスをコーディングできますが、オーバーライドされる各クラスには名前付きクラス定義が必要です。可能ですが、不格好です。

WicketBuilderは、名前付きクロージャを使用してこれらのオーバーライドをシミュレートします。クロージャーは、本質的に、ポータブルなコードブロックです。内部的には、ビルダーは動的クラスオーバーライドを作成し、名前付きメソッドが呼び出されたときにクロージャーを実行します。

[...]

于 2009-09-18T00:57:41.127 に答える
1

groovy1.7.xとwicket1.4.xの完全な例http://wash-inside-out.blogspot.com/2010/08/wicket-and-groovy-integration.html

于 2010-09-01T06:11:39.550 に答える
0

私は実際にはgroovyをあまり使用しませんが、数か月前に同じ質問をしました。さまざまなアプローチを試しました

http://rschmid.wordpress.com/2009/05/03/anonymouse-inner-classes-in-groovy/

于 2009-09-18T19:29:24.273 に答える
0

Groovy 1.7以降は、匿名の内部クラスをサポートしています。groovy1.7リリースノートを参照してください。

于 2009-10-04T22:04:13.050 に答える