クラス FreeMarkerView

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

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

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

  • url: FreeMarker テンプレートコンテキスト(ディレクトリ)を基準とした、ラップされる FreeMarker テンプレートの場所。
  • エンコーディング(オプション、デフォルトは FreeMarker 構成によって決定されます): FreeMarker テンプレートファイルのエンコーディング

現在の Web アプリケーションコンテキストでアクセス可能な FreeMarkerConfigurer などの単一の FreeMarkerConfig オブジェクトに、任意の Bean 名で依存します。または、FreeMarker Configuration オブジェクトを Bean プロパティとして設定することもできます。このアプローチの影響の詳細については、setConfiguration(freemarker.template.Configuration) を参照してください。

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

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

    • FreeMarkerView

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

    • setEncoding

      public void setEncoding(@Nullable StringSE encoding)
      FreeMarker テンプレートファイルのエンコーディングを設定します。デフォルトは、FreeMarker 構成によって決定されます。特に指定がない場合、"ISO-8859-1" です。

      すべてのテンプレートが共通のエンコードを共有する場合は、テンプレートごとではなく、FreeMarker 構成でエンコードを指定します。

    • getEncoding

      @Nullable protected StringSE getEncoding()
      FreeMarker テンプレートのエンコーディングを返します。
    • setConfiguration

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

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

    • getConfiguration

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

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

      protected void initServletContext(ServletContextEE servletContext) throws BeansException
      起動時に呼び出されます。このファクトリに関連する構成を見つけるために、単一の FreeMarkerConfig Bean を探します。

      デフォルトのロケールのテンプレートが見つかるかどうかを確認します。ロケール固有のテンプレートが見つからない場合、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 に使用する構成インスタンス
      例外:
      BeansException - 構成インスタンスが見つからなかった場合
      関連事項:
    • getObjectWrapper

      protected freemarker.template.ObjectWrapper getObjectWrapper()
      構成された FreeMarker ObjectWrapper、または何も指定されていない場合は default wrapper を返します。
      関連事項:
      • 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 テンプレートを取得します。

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

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

      protected freemarker.template.Template getTemplate(StringSE name, LocaleSE locale) throws IOExceptionSE
      "encoding" Bean プロパティで指定されたエンコーディングを使用して、指定された名前で指定された FreeMarker テンプレートを取得します。

      サブクラスから呼び出して、特定のテンプレートを取得できます。たとえば、複数のテンプレートを 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)