90

JSF では、EL の空の演算子を使用して、コンポーネントをレンダリングするかどうかを指定できます。

rendered="#{not empty myBean.myList}"

私が理解しているように、演算子はヌルチェックとして機能するだけでなく、リストが空かどうかをチェックします。

独自のカスタム クラスのいくつかのオブジェクトに対して空のチェックを行いたいのですが、どのインターフェイスまたはインターフェイスの一部を実装する必要がありますか? empty オペレーターと互換性のあるインターフェースはどれですか?

4

2 に答える 2

156

EL 2.2 仕様から(「評価用の仕様をダウンロードするには、ここをクリックしてください」の下にあるものを入手してください):

1.10 空の演算子 -empty A

operator は、empty値が null か空かを判別するために使用できる接頭演算子です。

評価しますempty A

  • Aの場合null、リターンtrue
  • それ以外の場合、Aが空の文字列の場合は、戻りますtrue
  • それ以外の場合、Aが空の配列の場合は戻りますtrue
  • それ以外の場合、Aが空の場合Map、戻りますtrue
  • それ以外の場合、Aが空の場合Collection、戻りますtrue
  • そうでなければ戻るfalse

したがって、インターフェースを考慮すると、それはオンCollectionMapのみ機能します。あなたの場合、私Collectionは最良の選択肢だと思います。または、Javabean のようなオブジェクトの場合は、Map. いずれにせよ、裏では、isEmpty()メソッドは実際のチェックに使用されます。実装できない、または実装したくないインターフェイス メソッドでは、 をスローできますUnsupportedOperationException

于 2013-01-06T18:04:47.820 に答える
9

Collection を実装するという BalusC の提案を使用して、拡張p:dataTableする my で not empty 演算子を使用して素数面を非表示にできるようになりましたdataModeljavax.faces.model.ListDataModel

コードサンプル:

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import javax.faces.model.ListDataModel;
import org.primefaces.model.SelectableDataModel;

public class EntityDataModel extends ListDataModel<Entity> implements
        Collection<Entity>, SelectableDataModel<Entity>, Serializable {

    public EntityDataModel(List<Entity> data) { super(data); }

    @Override
    public Entity getRowData(String rowKey) {
        // In a real app, a more efficient way like a query by rowKey should be
        // implemented to deal with huge data
        List<Entity> entitys = (List<Entity>) getWrappedData();
        for (Entity entity : entitys) {
            if (Integer.toString(entity.getId()).equals(rowKey)) return entity;
        }
        return null;
    }

    @Override
    public Object getRowKey(Entity entity) {
        return entity.getId();
    }

    @Override
    public boolean isEmpty() {
        List<Entity> entity = (List<Entity>) getWrappedData();
        return (entity == null) || entity.isEmpty();
    }
    // ... other not implemented methods of Collection...
}
于 2013-01-07T18:51:58.737 に答える