2015-03-10 24 views
7

Nonostante ci siano molte discussioni intorno a freemarker + spring, è difficile trovare un esempio operativo pulito da copiare ed eseguire.
Potresti fornire la configurazione di lavoro più semplice di freemarker in spring xml context e snippet di codice java per caricare template da file di risorse ed elaborarlo.freemarker + configurazione a molla ed esempio più semplice

+0

Questo esempio è usando config java-based e sta ancora usando un progetto web, ma questo è quello che faccio riferimento: https://github.com/edendramis/freemarker-example – ratherblue

risposta

13

pom.xml

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context-support</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.freemarker</groupId> 
    <artifactId>freemarker</artifactId> 
</dependency> 

applicationContext.xml

<bean id="freeMarkerConfigurationFactory" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean"> 
    <property name="templateLoaderPath" value="classpath:/META-INF/freemarker"/> 
    <property name="preferFileSystemAccess" value="false"/> 
</bean> 

AlertMailComposer.java

import static org.springframework.ui.freemarker.FreeMarkerTemplateUtils.processTemplateIntoString; 

@Component 
public class AlertMailComposer implements Processor { 

    public static final String TEMPLATE = "AlertMail.ftl"; 

    @Autowired 
    private Configuration freemarkerConfiguration; 

    protected String composeHtml(Alert alert) throws IOException, TemplateException { 
     return processTemplateIntoString(freemarkerConfiguration.getTemplate(TEMPLATE), ImmutableMap.of(
       "alertType", alert.getAlertType(), 
       "message", alert.getMessage(), 
       "nodeName", alert.getEvent().getNodeName(), 
       "event", toJson(alert.getEvent(), true) 
     )); 
    } 
... 

AlertMail.ftl

<html> 
<body style="font-family:verdana;font-size:10"> 
    <b>${alertType}: </b>${message}<br> 
    <b>on: </b>${nodeName}<br> 
    <p/> 
    <pre style="font-family:verdana;font-size:10;color:grey"> 
${event} 
    </pre> 
</body> 
</html> 
1

Il miglior esempio operativo. È possibile scaricare il codice sorgente here.

+0

Grazie per la tua risposta, ho già lavorato su questo blog ed è buono. Ma è strettamente legato al layout del progetto web. Quello che sto cercando è 'caricare template da risorse e sostituti placehoder' il più semplice possibile. –

3

Nel contesto xml primavera, dichiarando FreemarkerConfigurationFactoryBean è sufficiente, vale a dire

<bean id="freemarkerConfigFactory" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean"> 
    <property name="templateLoaderPath" value="classpath:templates/"/> 
</bean> 

Non c'è bisogno di specificare ulteriormente freemarker.template.Configuration fagiolo nel file XML se si utilizza @Autowired annotazione. Viene creato dalla fabbrica e iniettato da Spring.

0

Altro che dipendenza Maven in pom.xml di utilizzarlo con la configurazione java in primavera si può fare -

public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class<?>[] { MyRootContextConfig.class }; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return new Class<?>[] { MyServletContextConfig.class }; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     return new String[] { "/test/*" }; 
    } 

} 

e poi MyRootContextConfig può avere

@Bean(name = "myFreeMarkerConfigruation") 
public FreeMarkerConfigurationFactoryBean getFreeMarkerConfiguration() { 
    FreeMarkerConfigurationFactoryBean bean = new FreeMarkerConfigurationFactoryBean(); 
    bean.setTemplateLoaderPath("classpath:/templates/"); 
    return bean; 
}