public class FreeMarkerView extends AbstractTemplateView
次の JavaBean プロパティを公開します。
現在の Web アプリケーションコンテキストでアクセスできる FreeMarkerConfigurer
などの単一の FreeMarkerConfig
オブジェクトに、任意の Bean 名で依存します。または、FreeMarker Configuration
オブジェクトを Bean プロパティとして設定できます。このアプローチの影響の詳細については、setConfiguration(freemarker.template.Configuration)
を参照してください。
メモ: Spring の FreeMarker サポートには FreeMarker 2.3 以上が必要です。
AbstractUrlBasedView.setUrl(java.lang.String)
, AbstractTemplateView.setExposeSpringMacroHelpers(boolean)
, setEncoding(java.lang.String)
, setConfiguration(freemarker.template.Configuration)
, FreeMarkerConfig
, FreeMarkerConfigurer
SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE
DEFAULT_CONTENT_TYPE
logger
PATH_VARIABLES, RESPONSE_STATUS_ATTRIBUTE, SELECTED_CONTENT_TYPE
コンストラクターと説明 |
---|
FreeMarkerView() |
修飾子と型 | メソッドと説明 |
---|---|
protected FreeMarkerConfig | autodetectConfiguration() ApplicationContext を介して FreeMarkerConfig オブジェクトを自動検出します。 |
protected freemarker.template.SimpleHash | buildTemplateModel(MapSE<StringSE, ObjectSE> model, HttpServletRequestEE request, HttpServletResponseEE response) 指定されたモデルマップの FreeMarker テンプレートモデルを作成します。 |
boolean | checkResource(LocaleSE locale) このビューに使用される FreeMarker テンプレートが存在し、有効であることを確認してください。 |
protected void | doRender(MapSE<StringSE, ObjectSE> model, HttpServletRequestEE request, HttpServletResponseEE response) 使用する完全なテンプレートモデルを含む特定のモデルマップを使用して、FreeMarker ビューを特定のレスポンスにレンダリングします。 |
protected void | exposeHelpers(MapSE<StringSE, ObjectSE> model, HttpServletRequestEE request) 各レンダリング操作に固有のヘルパーを公開します。 |
protected freemarker.template.Configuration | getConfiguration() このビューで使用される FreeMarker 構成を返します。 |
protected StringSE | getEncoding() FreeMarker テンプレートのエンコーディングを返します。 |
protected freemarker.template.ObjectWrapper | getObjectWrapper() 構成された FreeMarker ObjectWrapper 、または何も指定されていない場合は default wrapper を返します。 |
protected freemarker.template.Template | getTemplate(LocaleSE locale) このビューによってレンダリングされる、指定されたロケールの FreeMarker テンプレートを取得します。 |
protected freemarker.template.Template | getTemplate(StringSE name, LocaleSE locale) "encoding" Bean プロパティで指定されたエンコーディングを使用して、指定された名前で指定された FreeMarker テンプレートを取得します。 |
protected void | initServletContext(ServletContextEE servletContext) 起動時に呼び出されます。 |
protected freemarker.template.Configuration | obtainConfiguration() 実際の使用のために FreeMarker 構成を取得します。 |
protected void | processTemplate(freemarker.template.Template template, freemarker.template.SimpleHash model, HttpServletResponseEE response) FreeMarker テンプレートをサーブレットレスポンスに処理します。 |
protected void | renderMergedTemplateModel(MapSE<StringSE, ObjectSE> model, HttpServletRequestEE request, HttpServletResponseEE response) モデルマップを FreeMarker テンプレートとマージして処理します。 |
void | setConfiguration(freemarker.template.Configuration configuration) このビューで使用する FreeMarker 構成を設定します。 |
void | setEncoding(StringSE encoding) FreeMarker テンプレートファイルのエンコーディングを設定します。 |
applyContentType, renderMergedOutputModel, setAllowRequestOverride, setAllowSessionOverride, setExposeRequestAttributes, setExposeSessionAttributes, setExposeSpringMacroHelpers
afterPropertiesSet, getUrl, isUrlRequired, setUrl, toString
addStaticAttribute, createMergedOutputModel, createRequestContext, createTemporaryOutputStream, exposeModelAsRequestAttributes, formatViewName, generatesDownloadContent, getAttributesMap, getBeanName, getContentType, getRequestContextAttribute, getRequestToExpose, getStaticAttributes, isExposePathVariables, prepareResponse, render, setAttributes, setAttributesCSV, setAttributesMap, setBeanName, setContentType, setExposeContextBeansAsAttributes, setExposedContextBeanNames, setExposePathVariables, setRequestContextAttribute, setResponseContentType, writeToResponse
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, isContextRequired, setServletContext
getApplicationContext, getMessageSourceAccessor, initApplicationContext, obtainApplicationContext, requiredContextClass, setApplicationContext
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, waitSE, waitSE, waitSE
public void setEncoding(@Nullable StringSE encoding)
すべてのテンプレートが共通のエンコードを共有する場合は、テンプレートごとではなく、FreeMarker 構成でエンコードを指定します。
public void setConfiguration(@Nullable freemarker.template.Configuration configuration)
これが設定されていない場合、デフォルトのルックアップが発生します。単一の FreeMarkerConfig
が任意の Bean 名とともに現在の Web アプリケーションコンテキストで予期されます。注 : このメソッドを使用すると、TaglibFactory
の新しいインスタンスが、FreeMarkerView
インスタンスごとに作成されます。これは、メモリと初期 CPU 使用率の点で非常に高負荷になる可能性があります。本番環境では、単一の共有 TaglibFactory
を公開する FreeMarkerConfig
を使用することをお勧めします。
@Nullable protected freemarker.template.Configuration getConfiguration()
protected freemarker.template.Configuration obtainConfiguration()
null
)IllegalStateExceptionSE
- 構成オブジェクトが設定されていない場合 protected void initServletContext(ServletContextEE servletContext) throws BeansException
デフォルトのロケールのテンプレートが見つかるかどうかを確認します。ロケール固有のテンプレートが見つからない場合、FreeMarker はロケール固有でないテンプレートをチェックします。
WebApplicationObjectSupport
の initServletContext
servletContext
- このアプリケーションオブジェクトが実行される ServletContext (非 null
)BeansException
TemplateCache.getTemplate(java.lang.String, java.util.Locale, java.lang.Object, java.lang.String, boolean)
protected FreeMarkerConfig autodetectConfiguration() throws BeansException
FreeMarkerConfig
オブジェクトを自動検出します。BeansException
- 構成インスタンスが見つからなかった場合 ApplicationObjectSupport.getApplicationContext()
, setConfiguration(freemarker.template.Configuration)
protected freemarker.template.ObjectWrapper getObjectWrapper()
ObjectWrapper
、または何も指定されていない場合は default wrapper
を返します。Configurable.getObjectWrapper()
public boolean checkResource(LocaleSE locale) throws ExceptionSE
オーバーライドして動作をカスタマイズできます。たとえば、複数のテンプレートを単一のビューにレンダリングする場合などです。
AbstractUrlBasedView
の checkResource
locale
- 探している希望のロケール true
。false
が存在しないことがわかっている場合 ExceptionSE
- リソースは存在するが無効である場合 (たとえば解析できませんでした)protected void renderMergedTemplateModel(MapSE<StringSE,ObjectSE> model, HttpServletRequestEE request, HttpServletResponseEE response) throws ExceptionSE
カスタム動作が必要な場合は、このメソッドをオーバーライドできます。
AbstractTemplateView
の renderMergedTemplateModel
model
- 必要に応じてリクエスト属性とセッション属性がマージされた出力マップの組み合わせ request
- 現在の HTTP リクエスト response
- 現在の HTTP レスポンス ExceptionSE
- レンダリングに失敗した場合 protected void exposeHelpers(MapSE<StringSE,ObjectSE> model, HttpServletRequestEE request) throws ExceptionSE
renderMergedTemplateModel
によって呼び出されます。デフォルトの実装は空です。このメソッドをオーバーライドして、モデルにカスタムヘルパーを追加できます。
model
- マージ時にテンプレートに渡されるモデル request
- 現在の HTTP リクエスト ExceptionSE
- コンテキストに情報を追加しているときに致命的なエラーが発生した場合 renderMergedTemplateModel(java.util.Map<java.lang.String, java.lang.Object>, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
protected void doRender(MapSE<StringSE,ObjectSE> model, HttpServletRequestEE request, HttpServletResponseEE response) throws ExceptionSE
デフォルトの実装では、getTemplate
を介して取得された "url" Bean プロパティで指定されたテンプレートがレンダリングされます。processTemplate
メソッドに委譲して、テンプレートインスタンスを指定されたテンプレートモデルとマージします。
標準の Freemarker ハッシュモデルをモデルに追加します: リクエストパラメーター、リクエスト、セッション、アプリケーション(ServletContext)、および JSP タグライブラリハッシュモデル。
複数のテンプレートを単一のビューにレンダリングするなど、動作をカスタマイズするためにオーバーライドできます。
model
- レンダリングに使用するモデル request
- 現在の HTTP リクエスト response
- 現在のサーブレットレスポンス IOExceptionSE
- テンプレートファイルを取得できなかった場合 ExceptionSE
- レンダリングに失敗した場合 AbstractUrlBasedView.setUrl(java.lang.String)
, RequestContextUtils.getLocale(javax.servlet.http.HttpServletRequest)
, getTemplate(java.util.Locale)
, processTemplate(freemarker.template.Template, freemarker.template.SimpleHash, javax.servlet.http.HttpServletResponse)
, FreemarkerServlet
protected freemarker.template.SimpleHash buildTemplateModel(MapSE<StringSE,ObjectSE> model, HttpServletRequestEE request, HttpServletResponseEE response)
デフォルトの実装は AllHttpScopesHashModel
を構築します。
model
- レンダリングに使用するモデル request
- 現在の HTTP リクエスト response
- 現在のサーブレットレスポンス SimpleHash
またはそのサブクラスとしての FreeMarker テンプレートモデル protected freemarker.template.Template getTemplate(LocaleSE locale) throws IOExceptionSE
デフォルトでは、"url" Bean プロパティで指定されたテンプレートが取得されます。
locale
- 現在のロケール IOExceptionSE
- テンプレートファイルを取得できなかった場合 AbstractUrlBasedView.setUrl(java.lang.String)
, getTemplate(String, java.util.Locale)
protected freemarker.template.Template getTemplate(StringSE name, LocaleSE locale) throws IOExceptionSE
サブクラスから呼び出して、特定のテンプレートを取得できます。たとえば、複数のテンプレートを 1 つのビューにレンダリングできます。
name
- 目的のテンプレートのファイル名 locale
- 現在のロケール IOExceptionSE
- テンプレートファイルを取得できなかった場合 protected void processTemplate(freemarker.template.Template template, freemarker.template.SimpleHash model, HttpServletResponseEE response) throws IOExceptionSE, freemarker.template.TemplateException
動作をカスタマイズするためにオーバーライドできます。
template
- 処理するテンプレート model
- テンプレートのモデル response
- サーブレットのレスポンス (これを使用して OutputStream または Writer を入手します)IOExceptionSE
- テンプレートファイルを取得できなかった場合 freemarker.template.TemplateException
- FreeMarker によってスローされた場合 Template.process(Object, java.io.Writer)