これは複雑な質問ですので、長い説明を通してご容赦ください。
現在のシナリオ
SpringMVC3.0.5とApacheTiles2.2を使用しています。現在、Springベースのタイル構成は次のようになっています。
<bean id="tilesConfigurer"
class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/**/views.xml</value>
</list>
</property>
<!-- resolving preparer names as Spring bean definition names -->
<property name="preparerFactoryClass"
value="org.springframework.web.servlet.view.tiles2.SpringBeanPreparerFactory" />
</bean>
<bean id="tilesViewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver"
p:order="1" p:viewClass="org.springframework.web.servlet.view.tiles2.TilesView" />
(タイル)ビュー定義はすべてのviews.xml
ファイルから読み取られ、Springコントローラーがレンダリングされる論理ビュー名として「ホームページ」を生成すると、「ホームページ」という名前の対応するタイル定義が表示されます。
標的
ここで、Webアプリケーション内のさまざまなディレクトリからさまざまなビュー定義のセットを許可する予定です。理由は、さまざまなユーザーグループがグループに応じてカスタマイズされたテンプレートを使用するためです。
私の現在のビュー定義がすべてにあるとしましょう
/WEB-INF/default-views/**/views.xml
そして、2番目のフォルダを追加したい
/WEB-INF/administrator-views/**/views.xml
この2番目のフォルダーには、フォルダーと同じ名前のビュー定義が含まれている必要がありdefault-views
ます。ただし、URLパターンに応じて、どちらか一方が表示されます。次に2つのサンプルを示します。
http://example.com/default/foobar
==> Controller yields logical view name "foobar"
==> definition "foobar" from "default-views" folder shall be displayed
http://example.com/admin/foobar
==> Controller yields logical view name "foobar"
==> definition "foobar" from "administrator-views" folder shall be displayed
さらに、フォールバックメカニズムを許可したいと思います。対応するビューフォルダに特殊なビュー名(上記の例では「admin」)が存在しない場合は、他のフォルダのデフォルトバージョンを表示します。
ここのところ
現在、私はいくつかの出発点について考えています。多分私は微調整している可能性がありますTilesConfigurer
。これにより、ビュー定義が作成されたフォルダーを区別せずに、タイルビュー定義を単一のプロパティに保持します。
もう1つのオプションは、チェーンビューリゾルバーを使用してこれを実現しようとすることです。特殊なものはチェーンのさらに上にあり、デフォルトのものは最後にあります。
3番目のオプションは、異なるビュー名を使用し、コントローラーからのビュー名応答をインターセプトして、HandlerInterceptor
それを特殊なビューにマップすることです(存在しない場合は機能しない可能性があります)。
質問
- このビュー解決メカニズムを実装するための良いオプションは何ですか?
- ビュー定義を他の人/より専門的なものによって上書きできるようにする
- 表示をリクエストのURLパターンに依存させる
現時点では、私のオプション#2は、本当に必要でないときにSpringsクラスをいじるのを防ぎたいので、最も説得力があるように聞こえます。しかし、チェーンされたビューリゾルバーとのビュー定義リストの間の接続がありませんTilesConfigurer
。
これまでの忍耐と読書に感謝します。