Ich habe eine Weile damit verbracht, diese "spezielle Variable" in der Dokumentation zu identifizieren. Ich hatte einen Fall, in dem ich in der Lage sein wollte, den Root-Hash an ein Makro zu übergeben, das damit arbeiten würde. Ich habe Verweise auf Environment.getCurrentEnvironment() gefunden, aber das funktioniert in Java, nicht in Templates. Wie übergibt man das Stammdatenmodell an ein Makro?Wie kann ich auf die Root-Bean in meiner FreeMarker-Vorlage zugreifen?
5
A
Antwort
5
Unten ist ein Komponententest, der erfolgreich macht, was ich suchte. Der Schlüssel war die Variable '.data_model'.
public class TestFreeMarkerTemplating {
Configuration cfg = new Configuration();
StringTemplateLoader stringLoader = new StringTemplateLoader();
{ cfg.setTemplateLoader(stringLoader);
cfg.setObjectWrapper(new BeansWrapper()); }
@Test
public void testTestableMacros() throws TemplateException, IOException{
stringLoader.putTemplate("root", "<#macro user testPojo>Welcome ${testPojo.user}. <@subPojo sub/></#macro><#macro subPojo sub>Sub ${sub.user}!</#macro>");
stringLoader.putTemplate("testPojoTemplate", "<#import \"root\" as w><@w.user .data_model/>");
stringLoader.putTemplate("testSubPojoTemplate", "<#import \"root\" as w><@w.subPojo .data_model/>");
assertTemplateAndBeanYield("root", new TestPojo(), "");
assertTemplateAndBeanYield("testPojoTemplate", new TestPojo(), "Welcome Andy. Sub Bill!");
assertTemplateAndBeanYield("testSubPojoTemplate", new SubPojo(), "Sub Bill!");
}
public void assertTemplateAndBeanYield(String templateName, Object bean, String expectedOutput) throws IOException, TemplateException{
Template temp = cfg.getTemplate(templateName);
StringWriter out = new StringWriter();
temp.process(bean, out);
assertEquals(expectedOutput, out.toString());
}
public static class TestPojo {
private final String user = "Andy";
private final SubPojo sub = new SubPojo();
public String getUser() { return user; }
public SubPojo getSub() { return sub; }
}
public static class SubPojo {
private final String user = "Bill";
public String getUser() { return user; }
}
}
Verwandte Themen
- 1. Wie kann ich auf die Einsendungen meiner Facebook-Seite zugreifen?
- 2. Wie kann ich auf Pässe in meiner App zugreifen?
- 3. Ich kann nicht auf die URL meiner Anwendung zugreifen
- 4. Kann ich auf die href meiner Ajax-Anfrage im Javascript meiner Anfrage zugreifen?
- 5. Wie kann ich auf die lokalen Chrome-Speicherdaten auf meiner separaten Webseite zugreifen?
- 6. Kann ich auf die Ergebniszeichenfolge zugreifen, die den Abschluss in meiner Funktion aufruft? - swift
- 7. Wie kann ich auf die Kommandozeile in Adobe Air zugreifen?
- 8. Wie kann ich auf die enum in C++ zugreifen
- 9. Wie kann ich auf die Anfrage in JspTags zugreifen?
- 10. Wie kann ich auf die Google Analytics-API zugreifen?
- 11. Google App Engine: Wie kann ich programmgesteuert auf die Eigenschaften meiner Model-Klasse zugreifen?
- 12. Wie kann ich im Frühjahr auf die Datenquelle zugreifen?
- 13. Ich kann nicht auf die Zielseite zugreifen
- 14. Kann ich auf die Lautsprecherausgabe in iOS zugreifen?
- 15. Wie kann ich auf Iframe-Elternelemente zugreifen?
- 16. Wie kann ich auf neo4j-Ergebniseigenschaften zugreifen?
- 17. Wie kann ich auf Kommandozeilenparameter zugreifen?
- 18. Kann ich in iOS auf die iTunes-Titelliste zugreifen?
- 19. Ich kann keine Controller-Eigenschaft in meiner angular2 Ansicht zugreifen
- 20. Wie kann ich auf OpenSearchServer-Datenbankfelder zugreifen?
- 21. Wie kann ich mit xampp auf die MySQL-Befehlszeile zugreifen?
- 22. Wie kann ich von einer SKScene auf die Navigationsleiste zugreifen?
- 23. mne_browse_raw (Python MNE): Wie kann ich auf die Benutzeroberfläche zugreifen?
- 24. Wie kann ich auf die ListViewItems eines WPF-ListView zugreifen?
- 25. Wie kann ich auf die Eigenschaftenzusammenfassung im Code zugreifen?
- 26. WebExtension: Wie kann ich auf das Hintergrundskript in meiner Browseraktion zugreifen
- 27. Wie kann ich in meiner Anwendung auf den iPhone Passcode zugreifen?
- 28. Wie kann ich auf Befehlszeilenargumente in Python zugreifen?
- 29. Wie kann ich auf HttpContext.Current in Task.Factory.StartNew zugreifen?
- 30. Wie kann ich auf die Android-Anrufliste zugreifen?