120

ArrayListJSF EL 式を使用しての長さを取得するにはどうすればよいですか?

#{MyBean.somelist.length}

動作しません。

4

7 に答える 7

169

はい、Java API 作成委員会の一部の天才が、特定のクラスにはsize()メンバーまたはlength属性があっても、それらが実装されないgetSize()getLength()、JSF および他のほとんどの標準が必要とするものを実装しないと判断したため、必要なことを行うことはできません。

これを行うにはいくつかの方法があります。

1: 長さを返す関数を Bean に追加します。

クラス MyBean では:
public int getSomelistLength() { return this.somelist.length; }

JSF ページで:
#{MyBean.somelistLength}

2: Facelets を使用している場合 (なんてこった、なぜ Facelets を使用しないのですか!)、fn 名前空間を追加して、length 関数を使用できます。

JSFページで:
#{ fn:length(MyBean.somelist) }
于 2008-10-15T20:18:19.317 に答える
64

size() のことですよね?

#{MyBean.somelist.size()}

私にとってはうまくいきます(Jboss EL拡張機能を持つJBoss Seamを使用)

于 2008-10-16T10:53:46.117 に答える
14

注:このソリューションは、古いバージョンの JSTL に適しています。1.1 以降のバージョンでは、 Bill Jamesfn:length(MyBean.somelist)の提案に従って使用することをお勧めします。


この記事には、別の可能な解決策を含む、より詳細な情報が含まれています。

問題は、リストの size メソッド (有効な LinkedList メソッド) を呼び出そうとしていますが、JavaBeans 準拠の getter メソッドではないため、式 list.size-1 を評価できないことです。

このジレンマに対処するには、2 つの方法があります。まず、次のように RT Core ライブラリを使用できます。

<c_rt:out value='<%= list[list.size()-1] %>'/>

次に、JSP ページで Java コードを使用したくない場合は、リストを含み、JavaBeans 準拠の getter メソッドを使用してリストのサイズ プロパティへのアクセスを提供する単純なラッパー クラスを実装できます。その Bean をリスト 2.25 に示します。

c_rt メソッドの問題は、リクエストから変数を手動で取得する必要があることです。それ以外の方法では認識されないためです。この時点で、組み込み機能のために多くのコードを入れています。これはELの大きな欠陥です。

私は最終的に「ラッパー」メソッドを使用しました。これがそのクラスです。

public class CollectionWrapper {

    Collection collection;

    public CollectionWrapper(Collection collection) {
        this.collection = collection;
    }

    public Collection getCollection() {
        return collection;
    }

    public int getSize() {
        return collection.size();
    }
}

まだ誰も言及していない 3 番目のオプションは、リストのサイズを (MVC を使用していると仮定して) 別の属性としてモデルに入れることです。したがって、モデルには「someList」と「someListSize」があります。これは、この問題を解決する最も簡単な方法かもしれません。

于 2009-09-01T11:28:25.067 に答える
7
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

<h:outputText value="Table Size = #{fn:length(SystemBean.list)}"/>

On screen it displays the Table size

Example: Table Size = 5

于 2013-02-28T08:58:49.013 に答える
0

最終的にはEL Functorを使用して EL 言語を拡張できます。これにより、パラメーターを使用しても、任意の Java Bean メソッドを呼び出すことができます...

于 2008-10-17T13:06:32.993 に答える
-5

次の EL を使用して長さを取得できます。

#{Bean.list.size()}

于 2014-07-29T19:39:32.937 に答える