validar solo showcases showcase numeros formulario etiquetas ejemplo jsf el

solo - ¿Cómo funciona EL operador vacío en JSF?



validar formulario primefaces (2)

De la especificación EL 2.2 (obtenga la siguiente "Haga clic aquí para descargar las especificaciones para la evaluación"):

1.10 Operador empty A - empty A

El operador empty es un operador de prefijo que se puede usar para determinar si un valor es nulo o está vacío.

Para evaluar el empty A

  • Si A es null , devuelve true
  • De lo contrario, si A es la cadena vacía, devuelve true
  • De lo contrario, si A es una matriz vacía, entonces devuelve true
  • De lo contrario, si A es un Map vacío, devuelve true
  • De lo contrario, si A es una Collection vacía, devuelve true
  • De lo contrario devuelve false

Entonces, considerando las interfaces, solo funciona en Collection y Map . En tu caso, creo que Collection es la mejor opción. O, si es un objeto similar a Javabean, entonces Map . De cualquier manera, debajo de las cubiertas, se usa el método isEmpty() para la verificación real. En los métodos de interfaz que no puede o no quiere implementar, puede lanzar UnsupportedOperationException .

En JSF, se puede representar o no un componente utilizando el operador EL vacío

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

Como he entendido, el operador funciona tanto como null-check, pero también comprueba 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?


Usando la sugerencia de BalusC de implementar Collection ahora puedo ocultar mis primefaces p:dataTable usando el operador no vacío en mi dataModel que extiende javax.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... }