1概要

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

この記事では、Spring MVCの使用方法の基本については説明しません。詳細については、

この記事

を参照してください。さらに、これはFreeMarkerの広範な機能の詳細な外観を意図するものではありません。 FreeMarkerの使用法と構文の詳細については、http://freemarker.incubator.apache.org/[its website]を参照してください。


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. Spring Web設定

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フレームワークは、ビュー名を実際のビューにマッピングする


ViewResolver


インターフェースを提供します。

spring-webmvc

依存関係に属する


FreeMarkerViewResolver


のインスタンスを作成します。

そのオブジェクトは実行時に使用される必要な値で設定される必要があります。たとえば、


で終わるビューにFreeMarkerを使用するようにビューリゾルバを設定します。ftl


:

@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テンプレートを処理することができます。これは従来のSpringコントローラです。

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

以前に定義された

FreeMarkerViewResolver

およびパス構成は、ビュー名

index

を適切なFreeMarkerビューに変換します。


4 FreeMarker HTMLテンプレート


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

今度はFreeMarker



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


/cars

URIに対して要求が行われると、Springは提供されたモデルを使用してテンプレートを処理します。このテンプレートでは、**

#list

ディレクティブは、FreeMarkerがモデルから

carList

オブジェクトをループし、

car

を使用して現在の要素を参照し、そのブロック内のコンテンツをレンダリングすることを示します。

次のコードには、

carList

の各要素の属性を参照するための

FreeMarker


expressions

も含まれています。たとえば、現在のcar要素の

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結論

この記事では、

FreeMarkerをSpring MVCアプリケーションに統合する方法について説明しました

FreeMarkerの機能は、私たちが示したものをはるかに超えていますので、http://freemarker.incubator.apache.org/[Apache FreeMarkerのWebサイト]を参照してください。その使用に関するより詳細な情報。

この記事のサンプルコードはhttps://github.com/eugenp/tutorials/tree/master/spring-freemarker[Github]のプロジェクトで入手できます。