2013-04-30 7 views
9
私はこのような匿名の内部クラスのオブジェクトを持っている場合

は(ここではFooはインターフェースです):ELに匿名内部クラス豆のパラメータ(複数可)を持つメソッドを呼び出す

Foo foo = new Foo(){ 
    @Override 
    public String hello(Object dummyArg){ 
    return "hello, world."; 
    } 
}; 

と私はからFoo.helloを呼び出そう以下のようなJSPこの:

${foo.hello('blah')} 

それはスロー:パラメータがない場合

javax.el.MethodNotFoundException: Unable to find method [hello] with [1] parameters 

をしかし:

Bar bar = new bar(){ 
    @Override 
    public String hello(){ 
    return "hello, world."; 
    } 
}; 

...

${bar.hello()} 

それが正常に動作します。どうして?

これは7121303の複製ではありません。私は特に匿名の内部クラスについて質問しています。通常のクラスのインスタンスでは、任意の数のパラメータで動作します。

+0

私はTomcatの古いバージョンでこの種のbuに噛まれたことを覚えていると思います。あなたのサーバーは何ですか?最新バージョンを使用していることを確認してください。 –

+0

参照:http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-class-defined-in-a-differen –

答えて

1

おそらく、あなたはパラメータを渡すことができますが、EL関数を作成する必要があります。 (http://blog.idleworx.com/2010/04/custom-tags-and-custom-el-functions-in.html

メソッド引数を渡し、非ゲッターメソッドを呼び出すサポートがEL 2.2で導入されました。 tomcat(http://code2inspire.wordpress.com/2010/11/05/how-to-enable-el-2-2-on-tomcat-6/)でEL 2.2を有効にする

+2

'通常のクラスで、任意の数のパラメータで動作します.' –

1

私はどの環境を使用しているのかわかりませんが、tomcat7.0.40で試してみましたが、コードはうまく動作します。

Objectが予想されるときにStringを渡す際に問題が発生する可能性があります。いくつかの厳密な解析があるかもしれません。 以下を試してみることができます: 引数をpageContextに格納し、それを使って値を次のように関数に渡します。

<% 
pageContext.setAttribute("argObj", "blah"); 
%> 

${foo.hello(argObj)} 
関連する問題