Spring MVCでFreeMarkerを使うための紹介

Spring MVCでのFreeMarkerの使用の概要

1. 概要

FreeMarkerは、Apache SoftwareFoundationのJavaベースのテンプレートエンジンです。 他のテンプレートエンジンと同様に、FreeMarkerは、MVCパターンに従うアプリケーションでHTML Webページをサポートするように設計されています。 このチュートリアルでは、JSPの代わりにconfigure FreeMarker for use in Spring MVCを実行する方法を説明します。

この記事では、Spring MVCの使用の基本については説明しません。 詳細については、this articleを参照してください。 さらに、これはFreeMarkerの広範な機能を詳細に説明することを目的としたものではありません。 FreeMarkerの使用法と構文の詳細については、its websiteにアクセスしてください。

2. Mavenの依存関係

これはMavenベースのプロジェクトであるため、最初に必要な依存関係をpom.xmlに追加します。


    org.freemarker
    freemarker
    2.3.23


    org.springframework
    spring-context-support
    ${spring.version}

3. 構成

それでは、プロジェクトの構成について詳しく見ていきましょう。 これは注釈ベースのSpringプロジェクトであるため、XMLベースの構成のデモは行いません。

3.1. SpringWeb構成

Webコンポーネントを構成するためのクラスを作成しましょう。 そのためには、クラスに@EnableWebMvc@Configuration、および@ComponentScanの注釈を付ける必要があります。

@EnableWebMvc
@Configuration
@ComponentScan({"com.example.freemarker"})
public class SpringWebConfig extends WebMvcConfigurerAdapter {
    // All web configuration will go here.
}

3.2. ViewResolverを構成する

Spring MVC Frameworkは、ビュー名を実際のビューにマップするViewResolverインターフェースを提供します。 spring-webmvc依存関係に属するFreeMarkerViewResolverのインスタンスを作成します。

そのオブジェクトは、実行時に使用される必要な値で構成する必要があります。 たとえば、.ftlで終わるビューにFreeMarkerを使用するようにビューリゾルバーを構成します。

@Bean
public FreeMarkerViewResolver freemarkerViewResolver() {
    FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
    resolver.setCache(true);
    resolver.setPrefix("");
    resolver.setSuffix(".ftl");
    return resolver;
}

また、ここでキャッシュモードを制御する方法にも注意してください。これは、デバッグと開発のためにのみ無効にする必要があります。

3.3. FreeMarkerテンプレートパス構成

次に、テンプレートパスを設定します。これは、Webコンテキスト内のテンプレートの場所を示します。

@Bean
public FreeMarkerConfigurer freemarkerConfig() {
    FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();
    freeMarkerConfigurer.setTemplateLoaderPath("/WEB-INF/views/ftl/");
    return freeMarkerConfigurer;
}

3.4. Springコントローラーの構成

これで、Spring Controllerをprocess a FreeMarker template for displayに使用できます。 これは単に従来のSpring Controllerです:

@RequestMapping(value = "/cars", method = RequestMethod.GET)
public String init(@ModelAttribute("model") ModelMap model) {
    model.addAttribute("carList", carList);
    return "index";
}

以前に定義されたFreeMarkerViewResolverとパス構成は、ビュー名indexを適切なFreeMarkerビューに変換します。

4. FreeMarkerHTMLテンプレート

4.1. シンプルなHTMLテンプレートビューを作成する

HTML template with FreeMarkerを作成する時が来ました。 この例では、車のリストをモデルに追加しました。 FreeMarkerはそのリストにアクセスし、そのコンテンツを繰り返し処理して表示できます。

/cars URIが要求されると、Springは提供されたモデルを使用してテンプレートを処理します。 テンプレートでは、#list directiveは、FreeMarkerがモデルからcarListオブジェクトをループし、carを使用して現在の要素を参照し、そのブロック内のコンテンツをレンダリングする必要があることを示しています。

次のコードには、carListの各要素の属性を参照するためのFreeMarkerexpressionsも含まれています。または、たとえば、現在の車の要素のmakeプロパティを表示するには、式$\{car.make}を使用します。


Add Car
Make :
Model:

<#list model["carList"] as car>
Make Model
${car.make} ${car.model}

CSSで出力をスタイリングした後、処理されたFreeMarkerテンプレートは車のフォームとリストを生成します。

browser_localhost-300x235

5. 結論

この記事では、FreeMarker in a Spring MVC application. FreeMarkerの機能を統合する方法について説明しましたが、その使用法の詳細については、Apache FreeMarker websiteにアクセスしてください。

この記事のサンプルコードは、Githubのプロジェクトで入手できます。