web-dev-qa-db-ja.com

JSTL / ELを使用してパラメータ化されたメソッドをJSPから呼び出す方法

JSTL/ELを使用してJSPからJavaクラスで定義されている引数を使用してJavaメソッドを呼び出す方法。メソッドは配列を返しています。任意の戻り値を使用できます。

42
sachin gk

_web.xml_がServlet 3.0に準拠していると宣言されたServlet 3.0互換のコンテナー(Tomcat 7、Glassfish 3、JBoss AS 6など)をターゲットにして実行している場合にのみ、ELの引数を持つメソッドを呼び出すことができます。このサーブレットバージョンにはEL 2.2が付属しており、引数を使用して任意のインスタンスメソッドを呼び出すことができます。

public Object[] getArray(String key)のようなメソッドを持つクラスのインスタンスを参照するスコープ内に_${bean}_があると仮定すると、これを行うことができるはずです:

_<c:forEach items="${bean.getArray('foo')}" var="item">
    ${item} <br />
</c:forEach>
_

または別の変数を引数として

_<c:forEach items="${bean.getArray(foo)}" var="item">
    ${item} <br />
</c:forEach>
_

ただし、Servlet 3.0コンテナをターゲットにしない場合、ELの引数を使用してメソッドを呼び出すことはできません。あなたの最善の策は、Duffymoが提案するように、前処理サーブレットでジョブを実行することです。

_Object[] array = bean.getArray("foo");
request.setAttribute("array", array);
// ...
_

まったく別の方法として、メソッド呼び出しを委任するEL関数を作成できます。キックオフの例は、 このブログ の下部近くにあります。あなたは次のようなものになりたいと思います:

_<c:forEach items="${util:getArray(bean, 'foo')}" var="item">
    ${item} <br />
</c:forEach>
_

_public static Object[] getArray(Bean bean, String key) {
    return bean.getArray(key);
}
_
60
BalusC

上記の解決策はうまくいきませんでした。 Java class。に関数getRemitanceProfileInformation(user)がありました。Java classのusebean

<c:set var="paymentValueCode" value='remittanceaddr.getRemitanceProfileInformation("${user}")'/>

そしてそれは働いた。

4
user1417914

JSPに、メソッドを持つクラスのインスタンスへの参照を与え、呼び出します。

おそらく、JSPに誰がそのインスタンスを提供するかを尋ねているのでしょう。これは、モデル2 MVC配置のサーブレットです。

フローの仕組みは次のとおりです。

  1. GET/POSTリクエストをJSPからサーブレットに送信します。
  2. サーブレットはそのリクエストに基づいて動作し、JSPに代わっていくつかの作業を行います。必要なすべてのオブジェクトを要求、セッション、またはその他の適切なスコープに入れます。
  3. サーブレットは、応答を次のJSPにルーティングします。これは、要求元のJSPと同じ場合があります。
  4. すすぎ、繰り返します。
2
duffymo

JSFを使用している場合、BeanをView Scopeのモデルとして使用し、データソースから自動的にロードできます。また、JSPを使用している場合、TLDタグを使用してはどうでしょうか。そして、JSTLタグを使用して<c:foreach>?セッションでの保存からメモリを保存しますか、またはセッションで保存して、ロードイベントが完了したらメモリを削除しますか?このような方法(JSTL + TLD)

<c:forEach items="${myTag:getProductByPage(page)}" var="p">
     Product name: ${p.productName}
</c:forEach>
0
BachT