3

Spring MVC を使用してアプリケーションを構築しています。アプリケーション内のすべてのコントローラーのモデルに特定の変更を加えたいと考えています。特に、アプリケーションのすべてのページに存在する特定の追加データをモデルに挿入したいと考えています。

これにはいくつかの方法があります。すべてのコントローラーの最後にデータを追加する、余分なデータを追加するモデルのサブクラスを使用する、モデルをラップする ModelAndView のサブクラスを使用する、使用する前にモデルをラップする VelocityView のサブクラスを使用するそれは... 他のオプションがあると確信しています。

しかし、私には「エレガンス」の制約があります。すべてのコントローラーにコードを記述したくはありません。この動作を1か所だけで定義する必要があります。理想的には、IOC Bean 構成ファイルによって制御されます。

これをエレガントに達成する方法について誰かが推奨していますか?

4

3 に答える 3

4

アスペクトは優れたアプローチですが、Spring MVC を使用するとさらに簡単になります。リクエストが処理されるたびに、前または後に呼び出されるHandlerInterceptorを定義できます。HandlerInterceptor の postHandle メソッド (HandlerInterceptor インターフェースを実装するクラス内) で、データを ModelAndView に追加できます。構成ファイルでインターセプトするハンドラーを定義します。

于 2008-10-03T19:30:45.640 に答える
1

アスペクトの使用を検討できます。Spring には、使用できるAOP拡張機能もあります。

簡単に言えば、アスペクトを使用すると、クラスをコンパイルするとき、またはクラスローダーによってロードされるときに、クラスに「織り込まれる」コードを一度定義できます。これは比較的高度なものであり、新しいプログラマーにとって最も直感的なものではありませんが、あなたが言及している問題を正確に解決することを目的としています.

于 2008-10-03T17:11:34.937 に答える
0

私は間違っているかもしれませんが、要件の説明が間違っているのではないかと思います。

「すべてのコントローラーについて、特定のデータをモデルに追加したい」と言っているようです。

「特定のデータをすべてのビューで利用できるようにしたい」という意味だと思います。

私の疑いが正しければ、モデルにデータを追加することはモデルを汚染し、単一責任の原則に違反しています。これは、同じデータを複数のモデルに追加する場合に特に当てはまります。モデルをデータの便利な「キャリア」として使用しているだけではないことに注意してください。データは実際にはモデルとは何の関係もありません。

確かに、私は Spring MVC のやり方に完全に精通しているわけではありませんが、あなたが達成しようとしていることのより詳細な例は、より情報に基づいた議論を可能にするかもしれません.

于 2008-10-05T15:06:10.680 に答える