Frage

Gibt es eine Möglichkeit Geschwindigkeit zu konfigurieren, etwas anderes als toString () zu verwenden, um ein Objekt in eine Zeichenfolge in einer Vorlage zu konvertieren? Angenommen, ich bin ein einfaches Datum Klasse mit einem Format () Methode verwendet, und ich verwende das gleiche Format jedes Mal. Wenn alle meine Geschwindigkeit Code sieht wie folgt aus:

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

gibt es eine Konfiguration, die ich hinzufügen könnte, dass lassen würde ich nur sagen,

$someDate

statt? (Angenommen, ich bin nicht in der Lage, nur das Datum Klasse zu bearbeiten und gibt ihm eine entsprechende toString ()).

Ich tue dies in Zusammenhang mit einer Webapp mit WebWork gebaut, ob das hilft.

War es hilfreich?

Lösung

Sie können auch Ihre eigenen ReferenceInsertionEventHandler erstellen, die für Ihre Daten Uhren und automatisch funktioniert die Formatierung für Sie.

Andere Tipps

Geschwindigkeit ermöglicht eine JSTL wie Utility namens velocimacros:

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

Auf diese Weise könnten Sie ein Makro wie definieren:

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

Und dann rufen Sie wie folgt:

#d($someDate)

Oh, und die 1.6+ Versionen von Velocity haben einen neuen Render Schnittstelle. Wenn Sie nichts dagegen haben Sie das Datum Klasse auf eine Geschwindigkeit API binden, implementieren dann diese Schnittstelle und Geschwindigkeit die render (Kontext, Schreiber) Methode verwendet werden (für Ihren Fall, man muss nur den Kontext ignorieren und den Schriftsteller verwenden) anstelle von toString ( ).

ich konfrontierte dieses Problem auch und ich war in der Lage, es zu lösen, basierend auf Nathan Bubna Antwort .

Ich versuche nur, um die Antwort zu vervollständigen bietet die Link zu Geschwindigkeit Dokumentation , die erklärt, wie Eventhandler verwenden.

In meinem Fall musste ich Velocity Anruf „GetAsString“ statt toString-Methode für alle JsonPrimitive Objekte aus Gson Bibliothek jedes Mal, dass ein Verweis eingefügt wurde.

Es war so einfach wie das Erstellen eines

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;
    }

}

Und fügen Sie das Ereignis an den VelocityContext

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

...

context.attachEventCartridge(vec);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top