8

EL からオブジェクトのメソッドを呼び出すにはどうすればよいですか?

オブジェクトを与える:

public class TestObj {
   public testObj() { };

   public String test() { return "foo"; }
   public String someOtherMethod(String param) { return param + "_bar"; } 
}

obj が pageContext に追加されます

pageContext.setAttribute("t", new TestObj());

次と同等の方法を実行するにはどうすればよいですか。

<%= t.test() %>
<%= t.someOtherMethod("foo") %>

ELを使用していますか?

4

2 に答える 2

9

2009 年 12 月 10 日からリリースされた EL 2.2 以降でサポートされています (すでに 2.5 年以上前です!)。EL 2.2 は Servlet 3.0と連携しているため、次のようにServlet 3.0 と互換性のある Servlet 3.0 コンテナー ( Tomcat 7Glassfish 3など) をターゲットにする場合web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

    <!-- Config here. -->

</web-app>

次に、次の形式で EL の引数の有無にかかわらずメソッドを呼び出すことができます。

${t.test()}
${t.someOtherMethod('foo')}
于 2012-05-22T04:35:35.130 に答える
3

これによると、式言語での ELメソッド呼び出しのメソッド呼び出しは現在 JSR 状態であり、まだ実装されていません。私が使用しているのは、JavaBean コンポーネントがいくつかの呼び出しを行うための JST 機能です。たとえば、testメソッド シグネチャを次のように変更するとします。

public class TestObj {
    public TestObj() { };

    public String getTest() { return "foo"; }
}

getTest()次の構文でメソッドを呼び出すことができます。

${t.test}

ここで、パラメーターの受け渡しなど、より複雑なものが必要な場合は、EL が提供するカスタム メソッド機能を使用できます。これには、public クラスで宣言された public static メソッドと、TLD ファイルが必要です。素敵なチュートリアルがここにあります。

アップデート:

@BalusC が述べているように、後の仕様ではメソッド呼び出しがサポートされるようになりました。Java EE 6 互換のコンテナーにデプロイする場合、この Oracle サイトでは、この機能を適切に使用する方法が示されています。

于 2012-05-21T01:06:09.967 に答える