Question

Est-il possible de configurer la vitesse à utiliser autre chose que toString () pour convertir un objet en une chaîne dans un modèle? Par exemple, supposons que j'utilise une simple classe de date avec une méthode format (), et j'utilise le même format à chaque fois. Si tout mon code de vitesse ressemble à ceci:

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

est-il une configuration que je pourrais ajouter qui me permettrait de dire

$someDate

au lieu? (En supposant que je ne suis pas en mesure de modifier simplement la classe de date et donner une toString appropriée ()).

Je fais cela dans le contexte d'un webapp construit avec WebWork, si cela aide.

Était-ce utile?

La solution

Vous pouvez aussi créer votre propre ReferenceInsertionEventHandler qui surveille vos dates et fait automatiquement la mise en forme pour vous.

Autres conseils

Velocity permet une JSTL comme utilitaire appelé Velocimacros:

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

Cela vous permet de définir une macro comme:

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

Et puis l'appeler comme ceci:

#d($someDate)

Oh, et les versions 1.6+ de vitesse ont une nouvelle interface Renderable. Si vous ne me dérange pas attacher votre classe de date à une API de vitesse, puis implémenter cette interface et Velocity utilisera le rendu (contexte, écrivain) méthode (pour votre cas, vous ignorez le contexte et utiliser l'écrivain) au lieu de toString ( ).

Je fait face à ce problème aussi et j'ai pu le résoudre en fonction de Nathan Bubna réponse .

Je suis juste essayer de compléter la réponse fournissant lien vers documentation Velocity qui explique comment utiliser gestionnaires d'événements.

Dans mon cas, je avais besoin des appels Velocity « getAsString » au lieu de la méthode toString pour tous les objets de la bibliothèque JsonPrimitive gson chaque fois qui a été inséré une référence.

Il était aussi simple que la création d'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;
    }

}

Et ajouter l'événement à la VelocityContext

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

...

context.attachEventCartridge(vec);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top