2016-03-21 20 views
1

Angenommen, ich habe eine Vorlage in Pebble oder Freimarker (die beiden Motoren, die ich in Betracht ziehen). Es könnte wie folgt aussehen:Lazy Auswertung der Variablen/Interpolationen für Pebble/Freemarker

<Node> 
    <Element attribute="{{ VAR_A }}"/> 
    <Element attribute="{{ VAR_F }}"/> 
    <Element attribute="{{ VAR_N }}"/> 
</Node> 

In meinem Java-Code, muss ich diese Variablen ein Objekt schaffen, enthält, die meiner Meinung nach kann nur eine Karte von Variablennamen in den beiden Motoren zu widersprechen sein.

Um das Datenmodell zu generieren, muss ich jedoch wissen, für welche Variablen Werte berechnet werden sollen. Ich habe viele Daten. Ich möchte nicht alle VAR_A, VAR_B, VAR_C, VAR_D, VAR_E usw. berechnen, wenn sie nicht verwendet werden.

Gibt es einen Weg in einer oder beiden dieser Engines, um vor dem Ausführen der Vorlage eine Liste der erforderlichen Variablen zu erhalten? Eine Möglichkeit, faule Bewertung jedes Attributs Wert zu tun

Edit: Ich habe keine Ahnung, wie die Vorlage aussehen wird, wenn ich es bewerten muss, wie es vom Benutzer definiert wird. Selbst die Variablen, die sie liefern, sind benutzerdefinierte Strings - deshalb muss ich sie bekommen (und analysieren), bevor ich die Daten bereitstellen kann.

+0

Fragen Sie, ob Ihr Modell eine faule Auswertung der Attributwerte vornehmen kann? – Raedwald

+0

Im Wesentlichen ja. – AdamBourke

Antwort

0

Jede Art von Dokument, das Sie mit Freemarker generieren, wird eine eigene Vorlage haben. Jede Vorlage hat einen Satz, wenn sie Variablen verwendet. In Ihrem Java-Code stellen Sie eine Map zur Verfügung, die Variablennamen Werten zuordnet. Wenn Sie für jede Vorlage eine andere Java-Methode verwenden, können diese Methoden die kleinste benötigte Karte für diese Vorlage erstellen. Diese Karte muss kein HashMap sein; In der Theorie könnten Sie Ihre eigene Implementierung der Map Schnittstelle schreiben, die faule Bewertung in seinen get und values (usw.) Methoden tat. Aber das ist fast sicher mehr Mühe als es wert ist. Die Werte in der Karte, die Sie angeben, müssen nicht String Objekte sein; Freemarker wird die toString Methode jedes Objekts verwenden, die eine Art faule Auswertung bietet.

+0

In diesem Fall weiß ich nicht, wie die Vorlage im Voraus aussieht, und sie sind wahrscheinlich für jeden Benutzer unterschiedlich. Die Variablen in der Vorlage werden benutzerdefiniert sein, daher muss ich sie trotzdem jedes Mal ansehen. Ich kann HashMap überschreiben, wenn ich muss - aber ich hatte gehofft, dass es eine Möglichkeit gibt, die Vorlage vorzubewerten, um die Variablenliste zu erhalten. – AdamBourke

+0

Das macht keinen Sinn. Wenn die tempkates benutzerdefiniert sind, programmieren die Benutzer das System, nicht Sie. Das willst du nicht machen. – Raedwald

+0

Die Software bietet eine große Anpassbarkeit für Benutzer. Die Idee ist, dass sie ihre eigenen Vorlagen schreiben können, und wir werden mit den Daten in unserem System füllen. Die Variablen, die sie verwenden, werden an anderer Stelle im System definiert. Es ist sehr, was wir machen wollen. – AdamBourke