[英]How can my Freemarker ObjectWrapper access a template setting
[英]How can I access the root bean in my FreeMarker template?
我花了一段時間嘗試在文檔中識別此“特殊變量”。 我有一種情況,我希望能夠將根哈希傳遞給可以對其進行操作的宏。 我找到了對Environment.getCurrentEnvironment()的引用,但在Java中卻不能在模板中使用。 如何將根數據模型傳遞給宏?
以下是成功完成我所追求的單元測試。 關鍵是“ .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; }
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.