在JSF的组件可被呈现或不使用EL空操作者
rendered="#{not empty myBean.myList}"
正如我已经理解了运营商既充当空检查,还要检查检查,如果该列表是空的。
我想做我自己的自定义类的一些对象,其接口(S)或接口部分,我需要执行空检查? 其接口为空操作兼容?
在JSF的组件可被呈现或不使用EL空操作者
rendered="#{not empty myBean.myList}"
正如我已经理解了运营商既充当空检查,还要检查检查,如果该列表是空的。
我想做我自己的自定义类的一些对象,其接口(S)或接口部分,我需要执行空检查? 其接口为空操作兼容?
从EL 2.2规范 (得到一个下面的“点击这里下载评估规范”):
1.10空的运营商-
empty A
的
empty
操作者是一个前缀操作者可以被用来确定一个值是否为零或为空。为了评估
empty A
- 如果
A
为null
,则返回true
- 否则,如果
A
是空字符串,则返回true
- 否则,如果
A
是一个空数组,然后返回true
- 否则,如果
A
是空的Map
,返回true
- 否则,如果
A
是空Collection
,返回true
- 否则返回
false
因此,考虑到接口,它可以在Collection
和Map
只。 在你的情况,我认为Collection
是最好的选择。 或者,如果它是一个类似JavaBean的对象,然后Map
。 无论哪种方式,下盖,所述isEmpty()
被用于实际的检查方法。 在你不能或不想实现接口的方法,你可以抛出UnsupportedOperationException
。
使用实施征收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...
}