2009-04-17 20 views
1

私は、フォーム処理にSpringのSimpleFormControllerを使用しています。私の場合、編集ビュー(JSP)は編集内容によって異なる場合があります。 SimpleFormControllerformViewは、そのインスタンスを使用するすべてのスレッドによって共有されることを意味するフィールド(クラス変数)です。したがって、formBackingObjectにformView(setFormView経由)を設定することは安全ではありません(適切ではありません)。私の質問は、SimpleFormControllerをいくつかのコンテキストに基づいて異なる編集ビューで使用することが可能なのですか?SpringのSimpleFormControllerと異なるビュー

をフォローアップ:ソースを見た後、私がshowForm(HttpServletRequest req, HttpServletResponse resp, BindException errors)をオーバーライドして、私が好きな視野にshowForm(HttpServletRequest req, BindException errors, String viewName)を呼び出すことができることが表示されます。

+0

くそー、私は入力していましたが、あなた自身の疑問に素早く答えました:)あなたに幸運を。一度それを一番上に戻って使用すると簡単に使えますが、それが良いと思っています。私は注釈のアプローチで運がなかった - それはちょうど私を混乱させる、私はむしろコントローラインタフェースで自分のコントローラをプログラミングするだろう。 – MetroidFan2002

+0

私は、今までSpringで注釈コントローラを学んで使用するのにもっと多くの時間があったことを指摘する必要があります。ただし、変換サービスでは、汎用の型処理(特定の境界型を含むListインスタンスなど)のために、より多くの作業が必要です。 – MetroidFan2002

答えて

3

私はSimpleFormControllerが2つの "showForm"保護メソッドを提供すると信じています。これらはオーバーライドされ、BindExceptionはフォームオブジェクトである「ターゲット」を取得するために使用され、バインドされたフォームオブジェクトのプロパティに基づいてModelAndViewを返すことができます。また、processFormSubmissionを見て、実際に呼び出されるメソッドを指定する必要があります。もう1つの方法は "isFormChangeRequest"で、フォームを変更する必要があるかどうかを判断します。これを使用してこれをtrueに設定すると、要求、応答などでshowFormが呼び出され、要求を再検査できます。

この階層の使い方を学ぶ唯一の方法は、それを調べることです。それはあまり良くありません - それは多くのものを提供しますが、あまり良くありません。 Spring MVCは、通常、非常に有用であるために拡張する必要があります。

+0

Spring MVCのパッケージ化されたコントローラが「非常にうまく行かない」と思っていることについてもっと知りたいと思っています。個人的には、開始点としてかなり役に立つと思っています –

+0

開始点としては素晴らしいですが、あまりにも多くの保護されたメソッドを提供しているため、呼び出された場所の元に戻る必要があります。また、別の方法でコントローラを使用したい場合は、副作用を見つけることは困難です。たとえば、フォームオブジェクトを格納していたので、セッションのオブジェクトを使用してデータを表示していた別のコントローラにリダイレクトできるようになりましたが、フォームコントローラーがオブジェクトを削除しました – MetroidFan2002

+0

..今、Javadocでいくつかのメソッドについてこれを説明していますが、実際に使用する必要があるものを見つけるのは難しい保護されたメソッドがたくさんあります。階層は単に複雑すぎて、その名前に "Simple"が含まれるクラスは6つのクラス(Object拡張を無視します)を拡張し、恐らく約50のメソッドがうまく行かず、悪いデザインの重要な指標となります。余分な拡張子、使い方が足りません。 – MetroidFan2002

0

私はSimpleFormControllerでそれを行うことはできないと思います。

とにかく廃止予定のコントローラ階層クラスの使用をやめ、Spring 2.5で導入されたアノテーションベースのコントローラを見てみることもできます。これにより、より柔軟なフォーム処理が可能になります。あなたがオートインジェクションが気に入らなければ、離してはいけません。どの例でも実際にはっきりさせることはできませんが、アノテーション駆動型のコントローラを使用して、XMLコンテンツ内のすべてのBeanを定義することができます。

関連する問題