How does EL empty operator work in JSF?

后端 未结 2 396
借酒劲吻你
借酒劲吻你 2020-11-28 05:33

In JSF an component can be rendered or not using the EL empty operator

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

As I\'ve understood the ope

相关标签:
2条回答
  • 2020-11-28 06:21

    Using BalusC's suggestion of implementing Collection i can now hide my primefaces p:dataTable using not empty operator on my dataModel that extends javax.faces.model.ListDataModel

    Code sample:

    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...
    }
    
    0 讨论(0)
  • 2020-11-28 06:27

    From EL 2.2 specification (get the one below "Click here to download the spec for evaluation"):

    1.10 Empty Operator - empty A

    The empty operator is a prefix operator that can be used to determine if a value is null or empty.

    To evaluate empty A

    • If A is null, return true
    • Otherwise, if A is the empty string, then return true
    • Otherwise, if A is an empty array, then return true
    • Otherwise, if A is an empty Map, return true
    • Otherwise, if A is an empty Collection, return true
    • Otherwise return false

    So, considering the interfaces, it works on Collection and Map only. In your case, I think Collection is the best option. Or, if it's a Javabean-like object, then Map. Either way, under the covers, the isEmpty() method is used for the actual check. On interface methods which you can't or don't want to implement, you could throw UnsupportedOperationException.

    0 讨论(0)
提交回复
热议问题