如何在JSF EL空操作员的工作量?(How does EL empty operator work

2019-07-17 21:42发布

在JSF的组件可被呈现或不使用EL空操作者

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

正如我已经理解了运营商既充当空检查,还要检查检查,如果该列表是空的。

我想做我自己的自定义类的一些对象,其接口(S)或接口部分,我需要执行空检查? 其接口为空操作兼容?

Answer 1:

从EL 2.2规范 (得到一个下面的“点击这里下载评估规范”):

1.10空的运营商- empty A

empty操作者是一个前缀操作者可以被用来确定一个值是否为零或为空。

为了评估empty A

  • 如果Anull ,则返回true
  • 否则,如果A是空字符串,则返回true
  • 否则,如果A是一个空数组,然后返回true
  • 否则,如果A是空的Map ,返回true
  • 否则,如果A是空Collection ,返回true
  • 否则返回false

因此,考虑到接口,它可以在CollectionMap只。 在你的情况,我认为Collection是最好的选择。 或者,如果它是一个类似JavaBean的对象,然后Map 。 无论哪种方式,下盖,所述isEmpty()被用于实际的检查方法。 在你不能或不想实现接口的方法,你可以抛出UnsupportedOperationException



Answer 2:

使用实施征收BalusC的建议,我现在可以隐藏我的primefaces p:dataTable使用不是空的经营者本人的dataModel扩展javax.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...
}


文章来源: How does EL empty operator work in JSF?
标签: jsf el