2009-05-13 38 views
1

は、それはのような概念表現するのは簡単だ「彼らはPOSTを使用する場合、ユーザーがフォームを送信しているのか、彼らは 『isSubmit』パラメータを含む場合。」 SimpleFormControllerを拡張し、isFormSubmissionメソッドをオーバーライドするだけです。注釈のSpring MVC isFormSubmission()は同等ですか? Spring MVCので

しかし、Spring MVCのは、今の要求を処理するために@RequestMappingのように、これらのきちんとしたアノテーションを使用しています。 @RequestMappingには、誰かがGETまたはPOSTを使用しているかどうかの明白なフィルタがありますが、SimpleFormControllerで提供されているすべての有用なロジックに固有のサポートはありません。注釈を付けてもまだ利用できますか? hereから

答えて

1

ので、調査のビットの後、この状況に対処するためにいくつかの方法は、実際にあります。

第1の方法は、クラスレベルで@RequestMappingアノテーションを使用してSimpleFormControllerを使用することです。あまり知られていないが@RequestMappingの非常にクールなプロパティは、SpringのControllerインターフェイスを実装するクラスをどのように処理するかを完全によく知っているということです。ここでの唯一の欠点は、私はまだ古いMVCのインターフェイスとクラスを使用しており、Spring 3.0では廃止予定です。

第二の方法は、上記kgiannakakisにより指摘されました。サブミットを呼び出すことができるあらゆる方法で@RequestMappingメソッドを作成し、コンストラクタチェーンスタイルまたはプライベートメソッドのいずれかでサブミットメソッドを呼び出すだけです。シンプルで分かりやすいありがとう、kgiannakakis!ここで

0

コピー:あなたが唯一の目的の機能を定義するためにRequestMappingオプションを使用することができます

Path mappings can be narrowed through parameter conditions: a sequence of 
"myParam=myValue" style expressions, with a request only mapped if each such 
parameter is found to have the given value. "myParam" style expressions are 
also supported, with such parameters having to be present in the request 
(allowed to have any value). Finally, "!myParam" style expressions indicate 
that the specified parameter is not supposed to be present in the request. 

。注釈コントローラは、動作するインタフェースを実装していません。

+0

しかし、唯一の更なる要求を狭くする働きのことを。私は「それはポストか、このパラメータを持っている」と言うことはできません。私は「それは投稿であり、このパラメータを持っている」としか言えません。 –

+3

private submitFormメソッドを呼び出すメソッドは2つあります。最初はRequestMappingを使用してPOSTケースを処理し、もう1つはGETとパラメータを処理します。 – kgiannakakis

+0

+1。フォーム提出ハンドラメソッドは、さまざまな注釈付きハンドラメソッドによって呼び出されます。各メソッドは、フォーム提出を表現するさまざまな方法(POSTをキャッチするメソッド、パラメータをキャッチするメソッド)をキャッチします。それはかなりではありませんが、あなたがやろうとしていることは非常に独特であり、まずは良いアイデアではありません。 – skaffman

0

パスマッピングを使用しての一例である。

@RequestMapping(params = "formAction=APPROVE", method = RequestMethod.POST) 
    public String myMethod().... 

このメソッドは、「APPROVE」の値が「formAction」という名前のフィールドがあるのPOSTに続い呼び出されます。

0

@RequestMappingアノテーションを付けるメソッドの作業罰金記載されている他の回答。

あなたは@InitBinderでアノテート方法で同じことを達成したい場合は、単にこれを行うことができます。

@InitBinder 
public void initBinder(HttpServletRequest request) { 
    if ("POST".equals(request.getMethod()){ 
     //Do something 
    } 
}