Pregunta

¿Hay una manera de configurar la velocidad a usar algo distinto toString () para convertir un objeto en una cadena en una plantilla? Por ejemplo, supongamos que yo estoy usando una clase simple cita con un método format (), y utilizo el mismo formato en todo momento. Si todos los de mi código de velocidad se ve así:

$someDate.format('M-D-yyyy')

¿Hay alguna configuración que podría añadir que eso permítanme decir

$someDate

en su lugar? (Suponiendo que no estoy en condiciones de apenas corrige la clase fecha y darle una adecuada toString ()).

Estoy haciendo esto en el contexto de una aplicación web construida con WebWork, si eso ayuda.

¿Fue útil?

Solución

También puede crear su propia ReferenceInsertionEventHandler que vigila para su fechas y automáticamente hace el formato para usted.

Otros consejos

La velocidad permite una JSTL como utilidad llamada Velocimacros:

http://velocity.apache.org/engine/devel /user-guide.html#Velocimacros

Esto permitirá definir una macro como:

#macro( d $date)
   $date.format('M-D-yyyy')
#end

Y luego llamarlo de esta manera:

#d($someDate)

Ah, y las versiones 1.6 + de la velocidad tienen una nueva interfaz renderable. Si no te importa atar su clase de fecha a una API de velocidad, luego implementar esta interfaz y velocidad utilizará el método render (contexto, escritor) (para su caso, que acaba de pasar por alto el contexto y utilizar el escritor) en lugar de toString ( ).

Me enfrenté a este problema también y yo era capaz de resolverlo en base a Nathan Bubna respuesta .

Estoy tratando de completar la respuesta que proporciona la enlace a velocidad documentación que explica cómo utilizar manejadores de sucesos.

En mi caso, necesitaba llamadas de velocidad "getAsString" en lugar de método toString para todos los objetos de la biblioteca JsonPrimitive GSON cada vez que se inserta una referencia.

Era tan simple como crear un

public class JsonPrimitiveReferenceInsertionEventHandler implements ReferenceInsertionEventHandler{

    /* (non-Javadoc)
     * @see org.apache.velocity.app.event.ReferenceInsertionEventHandler#referenceInsert(java.lang.String, java.lang.Object)
     */
    @Override
    public Object referenceInsert(String reference, Object value) {
        if (value != null && value instanceof JsonPrimitive){
            return ((JsonPrimitive)value).getAsString();
        }
        return value;
    }

}

Y añadir el evento a la VelocityContext

vec = new EventCartridge();
vec.addEventHandler(new JsonPrimitiveReferenceInsertionEventHandler());

...

context.attachEventCartridge(vec);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top