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)
Schreibe einen Kommentar