1. 概要

FreeMarker は、ApacheSoftwareFoundationのJavaベースのテンプレートエンジンです。 他のテンプレートエンジンと同様に、FreeMarkerは、MVCパターンに従ったアプリケーションでHTMLWebページをサポートするように設計されています。 このチュートリアルでは、JSPの代わりにSpringMVCで使用するためにFreeMarkerを構成する方法を説明します。

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

2. Mavenの依存関係

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

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.23</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${spring.version}</version>
</dependency>

3. 構成

それでは、プロジェクトの構成について詳しく見ていきましょう。 これはアノテーションベースのSpringプロジェクトであるため、XMLベースの構成については説明しません。

3.1. SpringWeb構成

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

@EnableWebMvc
@Configuration
@ComponentScan({"com.baeldung.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 Controllerを使用して、表示用のFreeMarkerテンプレートを処理できます。 これは単に従来のSpringControllerです。

@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テンプレートビューを作成する

次に、FreeMarkerを使用してHTMLテンプレートを作成します。 この例では、モデルに車のリストを追加しました。 FreeMarkerはそのリストにアクセスし、その内容を繰り返すことでリストを表示できます。

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

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

<div id="header">
  <h2>FreeMarker Spring MVC Hello World</h2>
</div>
<div id="content">
  <fieldset>
    <legend>Add Car</legend>
    <form name="car" action="add" method="post">
      Make : <input type="text" name="make" /><br/>
      Model: <input type="text" name="model" /><br/>
      <input type="submit" value="Save" />
    </form>
  </fieldset>
  <br/>
  <table class="datatable">
    <tr>
      <th>Make</th>
      <th>Model</th>
    </tr>
    <#list model["carList"] as car>
      <tr>
        <td>${car.make}</td>
        <td>${car.model}</td>
      </tr>
    </#list>
  </table>
</div>

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

5. スプリングブーツ

Spring Bootを使用している場合は、 spring-boot-starter-freemarker依存関係をインポートするだけです。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
    <version>2.3.4.RELEASE</version>
</dependency>

次に、 src / main / resources /templatesの下にテンプレートファイルを追加するだけです。 Spring Bootは、FreeMarkerConfigurerFreeMarkerViewResolverなどの他のデフォルト構成を担当します。

6. 結論

この記事では、統合する方法について説明しました SpringMVCアプリケーションのFreeMarker。 FreeMarkerの機能は、私たちが示したものをはるかに超えているので、 ApacheFreeMarkerのWebサイトその使用法の詳細については。

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