web-dev-qa-db-ja.com

freemarker +スプリング構成と最も簡単な例

Freemarker + springについては多くの議論がありますが、コピーして実行するためのきちんとした実用的な例を見つけるのは困難です。
春のxmlコンテキストでfreemarkerの最も単純な動作設定を提供し、Javaコードスニペットをリソースファイルからテンプレートをロードして処理します。

11

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>
19

春のコンテキストxmlでは、FreemarkerConfigurationFactoryBeanを宣言するだけで十分です。

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

freemarker.template.Configurationアノテーションを使用する場合、xmlファイルで@Autowired Beanをさらに指定する必要はありません。これはファクトリーによって作成され、Springによって注入されます。

4
lfo

最良の動作例。ソースコードをダウンロードできます ここ

1
Vish

Java設定でそれを使用するためにpom.xmlのmaven依存関係以外に、あなたは行うことができます-

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

}

そしてMyRootContextConfig

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