JSF dataTable para mostrar un número fijo de filas
Pregunta
Saludos,
El contexto es MyFaces 2.0.2, posiblemente, también la adición de Tomahawk 20-1.1.10
I han creado un dataTable (actualmente un h:dataTable
, pero también podría ser una t:dataTable
usando Tomahawk) presentan ciertos attibutes de un List<MyObject>
en un bean de respaldo. He paginación devolviendo sólo subList
de la lista, así como la clasificación por clic de los encabezados de columna.
La siguiente cosa que tengo que hacer es asegurarse de la tabla siempre muestra un número fijo de filas. Por ejemplo, si el tamaño de mi página es 5 y tengo 12 elementos de la lista, necesito la página tres para mostrar los dos últimos puntos, más 3 filas en blanco.
He tratado de "rellenar" la subList
con las dos nulos y los casos de myObject
con valores nulos, pero esto condujo a ConcurrentModificationException
al golpear la última página de la tabla (la vista estaba tratando de getDisplayList
incluso como método de paginación era todavía sumando los valores adicionales.). Luego trató el relleno de la lista principal de la misma manera, pero luego llegué NullPointer
s en mis funciones de clasificación (una obviedad en la vista trasera). Además, todas estas cosas están por encima addng en el respaldo, cuando yo prefiero hacerlo en la vista XHTML.
(h:/t:)dataTable
tiene un atributo rows
, pero esto especifica el número máximo de filas que se muestran, no el mínimo, ya que necesito.
Las ideas, por favor?
Solución
No rellenar la lista secundaria. Cojín de la lista. Preferiblemente inmediatamente después de recuperar en el grano.
Otros consejos
La solución en este caso era para rellenar la lista principal, en lugar de la lista secundaria, el uso de objetos que no son nulos, pero cuyos atributos son nulos, y añadir un cheque nulo en Comparador:
if (obj1.getSomeValue() == null) {
return +1;
}
else if (obj2.getSomeValue() == null) {
return -1;
}
else {
// primary sorting code
}
que asegura elementos nulos siempre en último lugar. Funciona perfecto.
BalusC me dio el empujón en la dirección correcta, por lo que estoy aceptando su respuesta.