2011-05-18 5 views
5

ライブラリメソッドCommon.addTheUsualStuffToTheModel(model)は、のすべてのコントローラメソッドでモデルにさまざまな属性を追加する必要があります。繰り返しのSpringコントローラコードを実行する最も良い方法は?

model = Common.addTheUsualStuffToTheModel(model); 

をしかし、私は、これは「一度書けば、どこでも使用」の原則と一致していない怖い:

@RequestMapping(value = "/everypath", method = RequestMethod.GET) 
public final String everyHandler(ModelMap model) 
{ 
    model = Common.addTheUsualStuffToTheModel(model); 
    return "everyPage"; 
} 

これまでのところ私はすべてのハンドラメソッドにこれと同じ行を追加してきました。

すべてのハンドラでこのコードを繰り返さないようにするにはどうすればよいですか?

答えて

7

あなたのインターセプタで

は、あなたが(モデル属性が行くところ、実際にある)要求属性として何も追加できることをやってinterceptor<mvc:interceptors>を使用することができます。インターセプタコードは、各メソッドの前または後に実行されます(インターセプタマッピングに一致します)。

あなたは、必ずしもあなたがModelAndViewオブジェクトを取得postHandle方法で前のコントローラメソッド、モデルを移入する必要がない場合。

+0

postHandleRenderメソッドのように、ビューがレンダリングされる前にモデルを保持して追加することもできるので、リクエスト属性として追加する必要はありません。 – digitaljoel

+0

申し訳ありませんが、間違ったリンクを指定しました。これは 'portlet'ではなく' servlet'でなければなりません。サーブレットには3つのメソッドしかありません。モデルはpostHandleメソッドでのみ使用できます。ええ、@ digitaljoelええ、 – Bozho

+0

、それを追加しました。 – Bozho

0

@ModelAttributeアノテーション付き参照データプロバイダメソッドの指定についてはどうでしょうか。すべてのコントローラの基本クラスがあり、その基本クラスに@ModelAttributeメソッドがアノテーションされていれば、それらのコントローラによって処理されるすべてのビューのモデルでデータが利用できると考えられます。 15.3.2.8 in the Spring docsをご覧ください。

関連する問題