2015-03-10 3 views
7

Trotz es gibt eine Menge Diskussion um Freemarker + Frühling daher ist es schwierig zu finden ordentlich funktionierendes Beispiel zu kopieren und zu laufen.
Könnten Sie bitte die einfachste funktionierende Konfiguration von Freemarker im Frühjahr xml context und java code snippet bereitstellen, um die Vorlage aus der Ressourcendatei zu laden und zu verarbeiten.Freimarker + Feder Konfiguration und einfachste Beispiel

+0

Dieses Beispiel ist mit Java-basierten Konfigurations und verwendet immer noch ein Web-Projekt, aber das ist, was ich referenziere: https://github.com/edendramis/freemarker-example – ratherblue

Antwort

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

Bestes Arbeitsbeispiel. Sie können den Quellcode here herunterladen.

+0

Danke für Ihre Antwort, ich habe bereits durch diesen Blog gearbeitet und es ist gut. Aber es ist eng an das Webprojekt-Layout gebunden. Was ich suche, ist 'Vorlage von Ressource laden und Platzhalter ersetzen' so einfach wie möglich. –

3

Im Frühjahr Kontext xml, FreemarkerConfigurationFactoryBean erklärt genügt, das heißt

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

Keine Notwendigkeit, weitere freemarker.template.Configuration Bean in der XML-Datei angeben, wenn Sie @Autowired Anmerkung verwenden. Es wird von der Fabrik erstellt und von Spring injiziert.

0

Anders als Maven Abhängigkeit in pom.xml im Frühjahr mit Java-Konfiguration zu verwenden, die Sie tun können -

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/*" }; 
    } 

} 

und dann kann MyRootContextConfig haben

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