5

バッキングビーンなしでELのJSFコンポーネントにリストを渡すにはどうすればよいですか?つまり、Beanを使用せずにJSFでリスト/配列を宣言して初期化するにはどうすればよいですか?

例:

caller.xhtml

/* Call a JSF-Component */
<mycomp:displayList value="HERE I WANT TO PASS A LIST WITHOUT A BACKINGBEAN"/>

displayList.xhtml

/* MY Component */
<composite:interface>
     <composite:attribute name="value" type="java.util.list" />
</composite:interface>

Beanで宣言されていないリスト/コレクションをJSFコンポーネントに渡す可能性はありますか?

4

3 に答える 3

5

ELにはリストリテラルはありませんが、faces-config.xmlでリストを宣言することにより、Beanにリストを含める必要なしにリストを宣言できます。

<managed-bean>
    <managed-bean-name>someList</managed-bean-name>
    <managed-bean-class>java.util.ArrayList</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <list-entries>
        <value>One</value>
        <value>Two</value>
        <value>Three</value>
    </list-entries>
</managed-bean>

ユーティリティタイプを使用してリストを作成することもできます。

import java.util.*; import javax.faces.bean.*;

@ManagedBean @NoneScoped
public class Lister<T> extends AbstractList<T> {
  private List<T> list = new ArrayList<T>();

  public Lister plus(T t) {
    list.add(t);
    return this;
  }

  @Override public T get(int index) {
    return list.get(index);
  }

  @Override public int size() {
    return list.size();
  }

  @Override public String toString() {
    return list.toString();
  }
}

これは、次のような式で使用できます#{lister.plus('one').plus('two').plus('three')}

于 2012-05-19T19:18:58.770 に答える
3

EL3.0でコレクション構築が可能です。

セットする:

{1, 2, 3}

リスト:

[1, "two", [foo, bar]]

地図:

{"one":1, "two":2, "three":3}

JSFでELコレクション構築を使用する例:

<h:dataTable value="#{[1, 2, 3]}" var="v">
    <h:column>#{v}</h:column>
</h:dataTable>

EL 3.0仕様-最終リリース、2.2コレクションオブジェクトの構築を参照してください。

于 2015-07-14T09:52:19.070 に答える
2

あなたの質問が「ELにリストリテラルはありますか?」のようなものを意味する場合、答えは「ありません」です。

リストを作成し、JSFバッキングBeanを使用しない場合、答えは「CDIBeanまたはSpringBeanを使用する」です。

Javaプロジェクトにモデルクラスを含めるのが嫌いな場合は、特定の名前が使用されたときに新しいリストを作成するELリゾルバーを簡単に作成して登録できます。

いずれにせよ、あなたはおそらくいくつかの大きな間違いを犯しているか、何か重要なことを誤解しています。たぶんあなたは別の質問をするべきだったでしょう。

于 2012-05-19T18:16:11.633 に答える