En JSF, un componente se puede representar o no utilizando el operador vacío EL
rendered="#{not empty myBean.myList}"
Según tengo entendido, el operador funciona como verificación nula, pero también verifica si la lista está vacía.
Quiero hacer comprobaciones vacías en algunos objetos de mi propia clase personalizada, ¿qué interfaz (s) o partes de interfaces necesito implementar? ¿Con qué interfaz es compatible el operador vacío?
myBean
esnull
? ¿ Se devolverátrue
/false
todavía o puede lanzar una excepción?Usando la sugerencia de BalusC de implementar Collection, ahora puedo ocultar mis primefaces
p:dataTable
usando un operador no vacío en midataModel
que se extiendejavax.faces.model.ListDataModel
Muestra 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... }
fuente