テーマ
Spring Web MVC フレームワークテーマを適用して、アプリケーションの全体的なルックアンドフィールを設定し、ユーザーエクスペリエンスを向上させることができます。テーマは、アプリケーションの視覚的なスタイルに影響を与える静的リソース(通常はスタイルシートとイメージ)のコレクションです。
6.0 の時点で、テーマのサポートは廃止され、CSS の使用が優先され、サーバー側での特別なサポートはありません。 |
テーマを定義する
Web アプリケーションでテーマを使用するには、org.springframework.ui.context.ThemeSource
インターフェースの実装をセットアップする必要があります。WebApplicationContext
インターフェースは ThemeSource
を継承しますが、その責任を専用の実装に委譲します。デフォルトでは、デリゲートは、クラスパスのルートからプロパティファイルをロードする org.springframework.ui.context.support.ResourceBundleThemeSource
実装です。カスタム ThemeSource
実装を使用するか、ResourceBundleThemeSource
のベース名プレフィックスを構成するには、予約名 themeSource
でアプリケーションコンテキストに Bean を登録できます。Web アプリケーションコンテキストは、その名前の Bean を自動的に検出して使用します。
ResourceBundleThemeSource
を使用する場合、テーマは単純なプロパティファイルで定義されます。次の例に示すように、プロパティファイルにはテーマを構成するリソースがリストされます。
styleSheet=/themes/cool/style.css background=/themes/cool/img/coolBg.jpg
プロパティのキーは、ビューコードからテーマの要素を参照する名前です。JSP の場合、通常、spring:theme
カスタムタグを使用してこれを行います。これは、spring:message
タグに非常によく似ています。次の JSP フラグメントは、前の例で定義されたテーマを使用して、ルックアンドフィールをカスタマイズします。
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<html>
<head>
<link rel="stylesheet" href="<spring:theme code='styleSheet'/>" type="text/css"/>
</head>
<body style="background=<spring:theme code='background'/>">
...
</body>
</html>
デフォルトでは、ResourceBundleThemeSource
は空のベース名プレフィックスを使用します。その結果、プロパティファイルはクラスパスのルートからロードされます。cool.properties
テーマ定義をクラスパスのルートのディレクトリに配置します(たとえば、/WEB-INF/classes
に)。ResourceBundleThemeSource
は標準の Java リソースバンドルロードメカニズムを使用して、テーマの完全な国際化を可能にします。例: オランダ語のテキストを含む特別な背景イメージを参照する /WEB-INF/classes/cool_nl.properties
を作成できます。
テーマの解決
前のセクションで説明したように、テーマを定義したら、使用するテーマを決定します。DispatcherServlet
は、themeResolver
という名前の Bean を探して、使用する ThemeResolver
実装を見つけます。テーマリゾルバーは、LocaleResolver
とほぼ同じ方法で機能します。特定のリクエストに使用するテーマを検出し、リクエストのテーマを変更することもできます。次の表は、Spring が提供するテーマリゾルバーについて説明しています。
クラス | 説明 |
---|---|
|
|
| テーマはユーザーの HTTP セッションで維持されます。セッションごとに一度だけ設定する必要がありますが、セッション間で永続化されることはありません。 |
| 選択したテーマは、クライアントの Cookie に保存されます。 |
Spring は、単純なリクエストパラメーターを使用して、すべてのリクエストでテーマを変更できる ThemeChangeInterceptor
も提供します。