0

私は現在、従来の Spring 2.5 アプリケーションを使用していますが、やりたいことは、(SimpleFormController を拡張する) カスタム コントローラーの検証ロジックを変更することです。

protected void onBindAndValidate(HttpServletRequest request, Object command, BindException errors) throws Exception;

このメソッド内でやりたいことは、提供されたサービス クラスの結果に応じて Cookie を書き込むことです。ただし、コントローラーのワークフロー内のこの時点では、HttpServletResponseオブジェクトにアクセスできないため、他に次の方法はありますか?

  • オブジェクトを取得しHttpServletResponseて、Cookie を書き込みます。または。
  • Spring MVC 内の他の機能を使用して Cookie を生成します。を見てきましたorg.springframework.web.util.CookieGeneratorが、それでも機能するには応答オブジェクトが必要です。

誰でも提供できる助けに感謝します。

お時間をいただきありがとうございます!

4

1 に答える 1

0

Spring MVC 2.5 内からこれを行うための直感的な組み込みの方法をまだ見つけられないことがわかりました。

だから私がやったのはこのハックです。最初に、コントローラーを変更して、結果のサービス オブジェクト (呼び出される場所はどこでも) を取得するユーティリティ関数クラスを呼び出します。これにより、サーブレット互換getCookie()メソッドが公開され、次のようにユーザーのセッションの下に配置されます。

WebUtils.setSessionAttribute(request, "myResponseObjectSessionName", myResponseObject);

さて、それらはすべて から継承されているためSimpleFormController、代わりに、前者から引き続き継承されますが、次のhandleRequestInternal()ようにメソッドが変更された新しい抽象クラスを作成しました。

public ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {

    // let the controller do it's job
    ModelAndView result = handleRequestInternal(request, response, errors);

    // and then use a helper class to inspect the session, find the session attribute
    // 'myResponseObjectSessionName', and set any cookies left in case it does exist at 
    // this point in time.
    new ProcessServiceObject().setServiceResponseCookie(request, response);

    return result;
}

あまりエレガントではありませんが、うまくいくと思います。乾杯。

于 2012-08-10T17:09:06.047 に答える