JSF式言語でリストの長さを取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/206161

  •  03-07-2019
  •  | 
  •  

質問

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

#{MyBean.somelist.length}

機能しません。

役に立ちましたか?

解決

はい、Java API作成委員会のある天才が、特定のクラスに size()メンバーまたは length 属性があるとしても、< code> getSize()または getLength()はJSFおよび他のほとんどの標準で必要であるため、望みどおりに実行できません。

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

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

In class MyBean:
public int getSomelistLength() { return this.somelist.length; }

In your JSF page:
#{MyBean.somelistLength}

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

In JSF page:
#{ fn:length(MyBean.somelist) }

他のヒント

size()という意味ですか?

#{MyBean.somelist.size()}

私のために動作します(Jboss EL拡張機能を持つJBoss Seamを使用)

注:このソリューションは、JSTLの古いバージョンに適しています。 1.1以降のバージョンでは、fn:length(MyBean.somelist)を使用することをお勧めします-the-length-of-a-list-in-the-jsf-expression-language / 206252#206252 ">ビル・ジェームス。


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

  

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

     

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

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

2番目に、JSPページでJavaコードを回避したい場合は、リストを含み、JavaBeans準拠のgetterメソッドでリストのsizeプロパティへのアクセスを提供する単純なラッパークラスを実装できます。このBeanはリスト2.25にリストされています。

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

&quot; wrapper&quot;を使用してしまいましたメソッド、ここにそのクラスがあります;

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を使用していると仮定して)別の属性としてモデルに入れることです。そのため、モデルには&quot; someList&quot;が含まれます。そして、「someListSize」。これがこの問題を解決する最も簡単な方法かもしれません。

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

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

画面にテーブルサイズが表示されます

例:テーブルサイズ= 5

最終的に、 EL Functor を使用してEL言語を拡張できます。パラメータを含むJava Beanメソッド...

7年後... faceletソリューションはjsfユーザーとして私にとってはまだ正常に動作しています

名前空間を含める xmlns:fn =&quot; http://java.sun.com/jsp/jstl/functions"

ELを次のように使用します #{fn:length(myBean.someList)} たとえば、以下のjsf ui:fragmentの例を使用すると問題なく動作します

<ui:fragment rendered="#{fn:length(myBean.someList) gt 0}">
    <!-- Do something here-->
</ui:fragment>

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

#{Bean.list.size()}

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top