2012-05-31 18 views
5

मैंने प्रलेखन में इस 'विशेष चर' की पहचान करने की कोशिश करते समय थोड़ी देर बिताई। मेरे पास एक ऐसा मामला था जहां मैं रूट हैश को एक मैक्रो को पास करने में सक्षम होना चाहता था जो उस पर काम करेगा। मुझे पर्यावरण .getCurrentEnvironment() के संदर्भ मिले, लेकिन यह जावा में टेम्पलेट्स में काम नहीं करता है। आप रूट डेटा मॉडल को मैक्रो में कैसे पास करते हैं?मैं अपने फ्रीमार्कर टेम्पलेट में रूट बीन का उपयोग कैसे कर सकता हूं?

उत्तर

5

नीचे एक यूनिट परीक्षण है जो सफलतापूर्वक करता है जो मैं करता था। कुंजी '.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; } 
} 
} 
संबंधित मुद्दे