lunes, 19 de marzo de 2007

Displaytag: Ordenando columna por fecha

Si tenemos una tabla de la displaytag, en la que quiero que una columna ordene por fecha es algo más complicado que lo que se suele hacer, ya que, normalmente ordena alfanuméricamente.

Solución (Ordena por dd/MM/yyyy):

1.-Agrego la fecha, e indico el decorador que usa.

< display:table name="sessionScope.miLista"
align="center"
id="elemento"
pagesize="10"
export="false"
requestURI="../../action/citizen/MiAction?method=miMetodo">


< display:column titleKey="fechaConvocatoria"
property="fecha"
sortable="true"
decorator="es.miproyecto.web.view.DateColumnDecorator"/>
< /display:table>



2.-Agrego la clase java correspondiente al decorador.

package es.princast.personalSelection.web.view;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.displaytag.decorator.ColumnDecorator;
import es.princast.personalSelection.util.DateDecorator;

/**
* Decorador para formatear la fecha en la tabla de listado
*
*/
public class DateColumnDecorator implements ColumnDecorator
{

/**
* Formateador de la fecha
*/
private SimpleDateFormat dateFormat = new SimpleDateFormat( "dd/MM/yyyy" );

/**
* Transformamos la reprentacion actual de la fecha en un string
*
* @param columnValue Object, el objeto date
*
* @return String value, el objeto string
*/
public final String decorate(Object columnValue)
{
if (columnValue!=null){
Date date = (Date) columnValue;
return this.dateFormat.format(date);
}else{
return new String("");
}
}
}

3 comentarios:

carlos ramos dijo...

muy buenoooo man me salvaste la vida, hacia horas que no encontraba la solucion, muchas gracias. Saludos desde Peru.

Unknown dijo...

De nada, yo también estuve "sufriendo" en su momento :)

Anónimo dijo...

Aunque no soy amigo de los Decorator a nivel de columna (mejor los de tabla y tratar cada columna en el get del campo a tratar), em he encontrado con un Decorator a nivel de columna en el que para decidir el valor debo evaluar varios atributos o propertys del bean iterado. Mi pregunta es si se puede pasar el bean entero al decorator, y no sólo un atributo o propiedad.