テーマ

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 が提供するテーマリゾルバーについて説明しています。

表 1: ThemeResolver の実装
クラス 説明

FixedThemeResolver

defaultThemeName プロパティを使用して設定された固定テーマを選択します。

SessionThemeResolver

テーマはユーザーの HTTP セッションで維持されます。セッションごとに一度だけ設定する必要がありますが、セッション間で永続化されることはありません。

CookieThemeResolver

選択したテーマは、クライアントの Cookie に保存されます。

Spring は、単純なリクエストパラメーターを使用して、すべてのリクエストでテーマを変更できる ThemeChangeInterceptor も提供します。