クラス FreeMarkerView

実装されたすべてのインターフェース:
AwareBeanNameAwareInitializingBeanApplicationContextAwareServletContextAwareView

public class FreeMarkerView extends AbstractTemplateView
FreeMarker テンプレートエンジンを使用して表示します。

次の構成プロパティを公開します。

  • url : FreeMarker テンプレートコンテキスト (ディレクトリ) に対する FreeMarker テンプレートの場所。
  • encoding : FreeMarker テンプレートファイルを読み取るときにバイトシーケンスを文字シーケンスにデコードするために使用されるエンコーディング。デフォルトは FreeMarker Configuration によって決定されます。
  • contentType : レンダリングされたレスポンスのコンテンツ型。デフォルトは "text/html;charset=ISO-8859-1" ですが、通常は実際に生成されたコンテンツ型に対応する値に設定する必要があります (下記の注記を参照)。

現在の Web アプリケーションコンテキストでアクセス可能な FreeMarkerConfigurer などの単一の FreeMarkerConfig オブジェクトに依存します。あるいは、FreeMarker Configuration を setConfiguration(freemarker.template.Configuration) 経由で直接設定することもできます。

: レスポンスをレンダリングするときに正しいエンコーディングが使用されるようにするには、適切な charset 属性 (例: "text/html;charset=UTF-8") を使用してコンテンツ型を設定します。FreeMarkerViewResolver を使用してビューを作成する場合は、FreeMarkerViewResolverコンテンツ型を直接設定します。

メモ: Spring の FreeMarker サポートには、FreeMarker 2.3.21 以上が必要です。Spring Framework 6.0 の時点で、FreeMarker テンプレートは、JSP サポートなしで最小限の方法でレンダリングされ、MVC 提供のモデルマップに加えて、一般的なサーブレットリソースとの調整のためにリクエスト属性を公開するだけです。

導入:
03.03.2004
作成者:
Darren Davison, Juergen Hoeller, Sam Brannen
関連事項:
  • コンストラクターの詳細

    • FreeMarkerView

      public FreeMarkerView()
  • メソッドの詳細

    • setEncoding

      public void setEncoding(@Nullable StringSE encoding)
      このビューの FreeMarker テンプレートファイルを読み取るときに、バイトシーケンスを文字シーケンスにデコードするために使用するエンコーディングを設定します。

      デフォルトでは null に設定され、エンコードを決定するために FreeMarker Configuration を使用する必要があることを示します。

      非 null エンコーディングは、FreeMarker Configuration によって決定されたデフォルトのエンコーディングをオーバーライドします。

      ここでまたは FreeMarker Configuration でエンコーディングが明示的に設定されていない場合、FreeMarker はプラットフォームファイルエンコーディング (JVM システムプロパティ file.encoding で定義) を使用してテンプレートファイルを読み取ります。プラットフォームファイルエンコーディングが定義されていない場合は "utf-8" を使用します。

      すべてのテンプレートが共通のエンコーディングを共有する場合は、テンプレートごとにではなく、FreeMarker Configuration でエンコーディングを指定することをお勧めします。

      指定されたエンコーディングまたはデフォルトのエンコーディングはテンプレートのレンダリングには使用されないことに注意してください。代わりに、レンダリングプロセスに明示的なエンコーディングを指定する必要があります。詳細については、クラスレベルのドキュメントの注記を参照してください。

      関連事項:
    • getEncoding

      @Nullable protected StringSE getEncoding()
      このビューの FreeMarker テンプレートファイルを読み取るときにバイトシーケンスを文字シーケンスにデコードするために使用されるエンコーディングを取得するか、エンコーディングを決定するために FreeMarker Configuration を使用する必要があることを示す null を取得します。
      関連事項:
    • setConfiguration

      public void setConfiguration(@Nullable freemarker.template.Configuration configuration)
      このビューで使用される FreeMarker Configuration を設定します。

      設定されていない場合は、デフォルトの検索が行われます。つまり、現在の Web アプリケーションコンテキストで、任意の Bean 名を持つ単一の FreeMarkerConfig が想定されます。

    • getConfiguration

      @Nullable protected freemarker.template.Configuration getConfiguration()
      このビューで使用される FreeMarker Configuration を返します。
    • obtainConfiguration

      protected freemarker.template.Configuration obtainConfiguration()
      実際の使用のために FreeMarker Configuration を取得します。
      戻り値:
      FreeMarker 構成 (非 null)
      例外:
      IllegalStateExceptionSE - 構成オブジェクトが設定されていない場合
      導入:
      5.0
    • initServletContext

      protected void initServletContext(ServletContextEE servletContext) throws BeansException
      起動時に呼び出されます。単一の FreeMarkerConfig Bean を検索して、このビューに関連する Configuration を見つけます。

      デフォルトのロケールのテンプレートが見つかるかどうかを確認します。ロケール固有のテンプレートが見つからない場合、FreeMarker はロケール固有でないテンプレートをチェックします。

      オーバーライド:
      クラス WebApplicationObjectSupportinitServletContext 
      パラメーター:
      servletContext - このアプリケーションオブジェクトが実行される ServletContext (非 null)
      例外:
      BeansException
      関連事項:
      • TemplateCache.getTemplate(java.lang.String, java.util.Locale, java.lang.Object, java.lang.String, boolean)
    • autodetectConfiguration

      protected FreeMarkerConfig autodetectConfiguration() throws BeansException
      ApplicationContext を介して FreeMarkerConfig オブジェクトを自動検出します。
      戻り値:
      FreeMarkerViews に使用する FreeMarkerConfig インスタンス
      例外:
      BeansException - FreeMarkerConfig Bean が見つからない場合
      関連事項:
    • getObjectWrapper

      protected freemarker.template.ObjectWrapper getObjectWrapper()
      設定された FreeMarker ObjectWrapper を返します。指定されていない場合はデフォルトのラッパーを返します。
      関連事項:
      • Configurable.getObjectWrapper()
    • checkResource

      public boolean checkResource(LocaleSE locale) throws ExceptionSE
      このビューに使用される FreeMarker テンプレートが存在し、有効であることを確認してください。

      オーバーライドして動作をカスタマイズできます。たとえば、複数のテンプレートを単一のビューにレンダリングする場合などです。

      オーバーライド:
      クラス AbstractUrlBasedViewcheckResource 
      パラメーター:
      locale - 探している希望のロケール
      戻り値:
      リソースが存在する(または存在すると想定される)場合は truefalse が存在しないことがわかっている場合
      例外:
      ExceptionSE - リソースは存在するが無効である場合 (たとえば解析できませんでした)
    • renderMergedTemplateModel

      protected void renderMergedTemplateModel(MapSE<StringSE,ObjectSE> model, HttpServletRequestEE request, HttpServletResponseEE response) throws ExceptionSE
      モデルマップを FreeMarker テンプレートとマージして処理します。

      出力はサーブレットレスポンスに送られます。

      カスタム動作が必要な場合は、このメソッドをオーバーライドできます。

      次で指定:
      クラス AbstractTemplateViewrenderMergedTemplateModel 
      パラメーター:
      model - 必要に応じてリクエスト属性とセッション属性がマージされた出力マップの組み合わせ
      request - 現在の HTTP リクエスト
      response - 現在の HTTP レスポンス
      例外:
      ExceptionSE - レンダリングに失敗した場合
    • exposeHelpers

      protected void exposeHelpers(MapSE<StringSE,ObjectSE> model, HttpServletRequestEE request) throws ExceptionSE
      各レンダリング操作に固有のヘルパーを公開します。これは、異なるレンダリング操作が互いのフォーマットなどを上書きできないようにするために必要です。

      renderMergedTemplateModel によって呼び出されます。デフォルトの実装は空です。このメソッドをオーバーライドして、モデルにカスタムヘルパーを追加できます。

      パラメーター:
      model - マージ時にテンプレートに渡されるモデル
      request - 現在の HTTP リクエスト
      例外:
      ExceptionSE - コンテキストに情報を追加しているときに致命的なエラーが発生した場合
      関連事項:
    • doRender

      protected void doRender(MapSE<StringSE,ObjectSE> model, HttpServletRequestEE request, HttpServletResponseEE response) throws ExceptionSE
      使用する完全なテンプレートモデルを含む特定のモデルマップを使用して、FreeMarker ビューを特定のレスポンスにレンダリングします。

      デフォルトの実装では、getTemplate を介して取得された "url" Bean プロパティで指定されたテンプレートがレンダリングされます。processTemplate メソッドに委譲して、テンプレートインスタンスを指定されたテンプレートモデルとマージします。

      複数のテンプレートを単一のビューにレンダリングするなど、動作をカスタマイズするためにオーバーライドできます。

      パラメーター:
      model - レンダリングに使用するモデル
      request - 現在の HTTP リクエスト
      response - 現在のサーブレットレスポンス
      例外:
      IOExceptionSE - テンプレートファイルを取得できなかった場合
      ExceptionSE - レンダリングに失敗した場合
      関連事項:
    • buildTemplateModel

      protected freemarker.template.SimpleHash buildTemplateModel(MapSE<StringSE,ObjectSE> model, HttpServletRequestEE request, HttpServletResponseEE response)
      指定されたモデルマップの FreeMarker テンプレートモデルを作成します。

      デフォルトの実装では、指定された MVC モデルの SimpleHash を構築し、リクエスト属性への追加のフォールバックを使用します。

      パラメーター:
      model - レンダリングに使用するモデル
      request - 現在の HTTP リクエスト
      response - 現在のサーブレットレスポンス
      戻り値:
      SimpleHash またはそのサブクラスとしての FreeMarker テンプレートモデル
    • getTemplate

      protected freemarker.template.Template getTemplate(LocaleSE locale) throws IOExceptionSE
      このビューでレンダリングされる、指定されたロケールの FreeMarker Template を取得します。

      デフォルトでは、"url" Bean プロパティで指定されたテンプレートが取得されます。

      パラメーター:
      locale - 現在のロケール
      戻り値:
      FreeMarker Template をレンダリングする
      例外:
      IOExceptionSE - テンプレートファイルを取得できなかった場合
      関連事項:
    • getTemplate

      protected freemarker.template.Template getTemplate(StringSE name, LocaleSE locale) throws IOExceptionSE
      設定されている場合は設定されたエンコードを使用して、指定された名前とロケールの FreeMarker Template を取得します。

      サブクラスから呼び出して、特定のテンプレートを取得できます。たとえば、複数のテンプレートを 1 つのビューにレンダリングできます。

      パラメーター:
      name - 目的のテンプレートのファイル名
      locale - 現在のロケール
      戻り値:
      FreeMarker テンプレート
      例外:
      IOExceptionSE - テンプレートファイルを取得できなかった場合
      関連事項:
    • processTemplate

      protected void processTemplate(freemarker.template.Template template, freemarker.template.SimpleHash model, HttpServletResponseEE response) throws IOExceptionSE, freemarker.template.TemplateException
      FreeMarker テンプレートをサーブレットレスポンスに処理します。

      動作をカスタマイズするためにオーバーライドできます。

      パラメーター:
      template - 処理するテンプレート
      model - テンプレートのモデル
      response - サーブレットのレスポンス (これを使用して OutputStream または Writer を入手します)
      例外:
      IOExceptionSE - テンプレートファイルを取得できなかった場合
      freemarker.template.TemplateException - FreeMarker によってスローされた場合
      関連事項:
      • Template.process(Object, java.io.Writer)