0

タイトル失礼します。いい言葉遣いが思いつきませんでした。

最初に @RequestMapping メソッドの引数として取得せずに、Spring がページに提供するデフォルトのモデルを設定する方法はありますか?

アスペクトを使用してコントローラー メソッドの戻り値を取得し (ビューを返す)、それをモデルに挿入してから、モデルに追加したものを含む別のグローバル ビューをレンダリングしています。これは、Model をパラメーターとして要求するメソッドでうまく機能します。

ただし、モデルを明示的に要求しないすべてのメソッドをキャッチし、戻り値をモデルに挿入できるようにしたいと考えています (@AfterReturning アドバイスを使用)。何か案は?

4

2 に答える 2

2

スレッドセーフのコードに取り組んでいる将来の開発者を混乱させるので、私は@Autowiredonを使用しません。HttpServletRequest

代わりに、@ModelAttributeまたはのいずれかを使用する必要がありInterceptorます。

@ModelAttribute

参照: http ://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-ann-modelattrib-method-args

しかし、あなたはこのようなことをして、このメソッドをコントローラーに追加することができます:

@ModelAttribute
public preloadModel(HttpServletRequest request, ModelMap model) {
    //Add stuff to model.
}

インターセプター

参照:http ://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-handlermapping-interceptor

public class PreloadModelInterceptor extends HandlerInterceptorAdapter {

    @Override
    public void postHandle(HttpServletRequest request, 
                       HttpServletResponse response, 
                       Object handler,
        ModelAndView modelAndView) throws Exception {
    // add model attibutes for your view to see but not your controller
    }
}
于 2012-12-02T22:14:13.543 に答える
0

さて、私は回避策を見つけました。あるいは、基礎となる Spring フレームワークがとにかく行っていることのすべてかもしれません。HttpServletRequest で自動配線し、setAttribute を呼び出しました。うまくいくようです。

于 2012-12-02T16:16:44.383 に答える