[英]How can I access the root bean in my FreeMarker template?
I spent a while trying to identify this 'special variable' in the documentation. 我花了一段时间尝试在文档中识别此“特殊变量”。 I had a case where I wanted to be able to pass the root hash to a macro which would operate on it.
我有一种情况,我希望能够将根哈希传递给可以对其进行操作的宏。 I found references to Environment.getCurrentEnvironment() but that works in Java not templates.
我找到了对Environment.getCurrentEnvironment()的引用,但在Java中却不能在模板中使用。 How do you pass the root data model to a macro?
如何将根数据模型传递给宏?
Below is a unit test that successfully does what I was after. 以下是成功完成我所追求的单元测试。 The key was the '.data_model' 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; }
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.