No JSF, um componente pode ser renderizado ou não usando o operador EL empty
rendered="#{not empty myBean.myList}"
Pelo que entendi, o operador funciona tanto como verificação de nulos, mas também verifica se a lista está vazia.
Eu quero fazer verificações vazias em alguns objetos de minha própria classe personalizada, que interface (s) ou partes de interfaces preciso implementar? Com qual interface o operador vazio é compatível?
myBean
fornull
? Serátrue
/false
ainda será retornado ou pode lançar uma exceção?Usando a sugestão de BalusC de implementar a coleção, agora posso ocultar minhas faces primárias
p:dataTable
usando o operador not empty no meudataModel
que estendejavax.faces.model.ListDataModel
Amostra de código:
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... }
fonte