Eine solche Java-Klasse:
1 2 3 |
public class MyValues { public static String myString = "Hello, you world!"; } |
möchte man vielleicht auch in Velocity verfügbar haben. Nun funktioniert
1 |
$MyValues.myString |
schon mal nicht – $MyValues ist kein konkretes Objekt (und ohne eine Art Import wäre die Klasse eh nicht verfügbar). Eine Instanz möchte man aber auch nicht erzeugen:
1 2 |
View view = new VelocityView("myTemplate.vm"); view.put("values", new MyValues()); |
, denn damit wäre MyValues.myString immer “Hello, you world!” (da neu initialisiert), und wer weiß, vielleicht wurde das ja mal überschrieben? Im Java-Code würde man hier ja auch nicht auf Instanzen arbeiten, sondern auf der Klasse.
Und tatsächlich kann man Velocity auch nur die Klasse übergeben, und zwar genau so, wie man es erwartet:
1 2 |
View view = new VelocityView("myTemplate.vm"); view.put("values", MyValues.class); |
Im Grunde ist das nicht mal überraschend, aber ich finde das grad gut 🙂 In Velocity sieht das dann so aus:
1 |
$values.myString |
, und das gibt immer den aktuellen Wert aus! Mit statischen Methoden funktioniert das übrigens auch – und: Ja, man könnte auch einen Singleton verwenden. Ich find’ das trotzdem gut.