Erstellen Sie ein Objekt in einem velocity-template
Ich habe diese Frage bereits, aber es spricht liferay-Geschwindigkeit und scheint, um Zugang zu diesem '$portal", das Objekt, das ich keinen Zugriff habe.
Objekt erstellen im velocity-template
Speziell ich versuche zum erstellen eines Locale-Objekts in das template zu übergeben, ihn in ein $dateTool.format aufrufen, um die Ausgabe in einer bestimmten Sprache.
Kann ich nicht erstellen, das locale-Objekt und übergeben Sie es in die Vorlage vorher denn code nennen könnte eine Vielzahl von Vorlagen, von denen jeder konnte sich in verschiedenen Sprachen.
Habe ich versucht,
#set($localeClass = $portal.getClass().forName("java.util.Locale"))
$localeClass.getName
aber, dass nur die Ausgabe '$localeClass.getName' (ich war nicht sicher, ob $ - portal war, einige Magische pre-set-variable oder so).
Ich habe auch versucht
#set($localeClass = java.util.Locale.class)
$localeClass.getName
aber das gab mir eine runtime-exception, wenn ich versuchte zu verarbeiten, die Vorlage.
Sah ich die ClassTool präsentieren in der Geschwindigkeit, aber nicht unterstützt reflexiven Ausführung von code. Ich denke, ich könnte versuchen, so etwas wie $classTool.inspect("java.util.Locale").getType.getConstructor([$classTool.inspect("java.util.String"),$classTool.inspect("java.util.String")]).newInstance(["es","ES"])
.
Ich werde versuchen, das herauszufinden, aber in der Zwischenzeit werde ich sehen, ob jemand anderes hat eine bessere Idee.
BEARBEITEN
Seit Veröffentlichung, merkte ich, dass velocity hat ein ConversionTool (die war nicht dabei auf Ihre GenericTool übersicht Seite), das hat ein toLocale Funktion, die ich anrufen kann. So kann ich mit
$dateTool.format('dd-MMM-yyyy', $date, $conversionTool.toLocale("es_ES"))
Aber ich bin immer noch neugierig, ob es war ein Weg, dies zu erreichen über Reflexion.
- Ich sehe, das ist alt, aber ich bin auf diesem für die Stunden, die ich Hinzugefügt habe, wird eine neue Instanz von ConversionTool, um den Velocity-Kontext mit dem Namen conversionTool, aber immer wenn ich eine einfache toLocale("de_de") beschwert es sich über nullpointer in der format-Methode zur Laufzeit. (auf die Linie, auf der es verwendet das Gebietsschema). Alle Dinge, die Sie hatte einrichten? In einer einfachen unit-test funktioniert es einwandfrei. (Aufruf toLocale)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du hast es gut, aber Sie sollten
$localeClass.getName()
oder$localeClass.name
statt$localeClass.getName
. Finden Sie die Eigenschaft Lookup-Regeln in der Velocity user guide.Diese:
Ausgaben korrekt den String "java.util.Gebietsschema" für mich.
Soweit ich das verstanden habe dürfen Sie auch
für die erste Gebietsschema in einem Velocity-template.
Als für mich, ich habe auch versucht die Reflexion für die erste Gebietsschema in letzter Zeit, aber war nicht erfolgreich. Also ich bin mal gespannt, ob es jemals möglich zu.